perm filename E.UPD[UP,DOC] blob sn#781253 filedate 1985-01-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	All information in this file is included in E.ALS[UP,DOC].
C00003 00003	1975
C00013 00004	1976
C00051 00005	1977
C00092 00006	1978
C00223 00007	1979
C00249 00008	1980
C00280 00009	1981
C00295 ENDMK
C⊗;
All information in this file is included in E.ALS[UP,DOC].

This file is merely a HISTORY of the changes to E.

Contained herein are past news items that have now been merged
into the E manual.  Everything mentioned in this file has been
documented in the E manual E.ALS[UP,DOC] (the "?"  file).

Page references in this file refer to pages in E.ALS[UP,DOC],
but these references are not guaranteed to be currently accurate.

1975

∂1975 -- UDP files are remembered on file switching (maybe almost right).

∂1975 -- Formerly fatal errors kludged around.
Some formerly fatal errors no longer cause E to HALT, although the
fix may not always work and E may crash later after all. 

∂6/75 -- The main timing problem on entering the line editor is fixed.
Now you can type ahead characters meant for the line editor without
waiting for the line editor to be set up after you have given a
command to edit a particular line.  The fix involved a system modification.

∂6/75 -- Unexpected errors encountered by E are now automatically recorded.
An FBI program reports most of the mal-functionings to ALS when you
get into trouble and you may hear from him for more details if he
thinks that he can do something for you (or vice versa).

∂6/75 -- /F and /F/R modes break long pages up by inserting FFs.
See p. 20.

∂7/75 -- Bug in formatting SOS files fixed.
A recent bug in formatting SOS files has been fixed. Users are still
advised to repage such files with the /F switch if this is a
reasonable thing to do. 

∂7/75 -- α<cr> restores previous line editor line when typing filename.
When you get the message "Try again" after specifying a file name
with some error, it is now possible to invoke the <control><cr> line
editor command to recall what you had typed so that you need not type
everything over again. Most of the time this does not work but it
does here. 

∂7/75 -- The α* and αβ* commands repeat the last search command given.
See p. 13.

∂7/75 -- The ⊗; and ⊗: commands move straight up and down inside line editor.
The commands ⊗; and ⊗: do the same thing as ⊗↑ and ⊗↓ respectively,
except that instead of positioning you at the end of the new line,
they position you at the display column where you were when you gave
the command.  Thus these commands move you (inside the line editor)
straight up and down, except that if the display column is in the
middle of a tab on the new line, then you are positioned at the
beginning of that tab and if the display column is beyond the end of
the newly edited line, you are positioned at the end of that line. 

∂8/75 -- After exiting from E, the monitor command CONTINUE restores E
at the same line and page from which the command to exit was given. 

∂8/75 -- Entering and leaving the line editor now does not set the
WRITE flag unless the line is actually changed.

∂8/75 -- Parenthesis finding/matching commands available. See p. 22.

∂9/75 -- The ⊗H (Home) and ⊗? commands now will take arguments. See p. 15.

∂9/75 -- Type ahead for line editor improved.

∂9/75 -- ⊗0⊗W and ⊗0⊗L now move half a window in the indicated direction.

∂9/75 -- Attempting to move the arrow off the screen usually caused the
window to be reset with the arrow in the middle of the window.

∂9/75 -- ⊗XLINCNT now reports the length of the current line and the
number of characters on the current page.

∂10/1/75 -- New partial-sign command ⊗∂<cmd>. See p. 24.

∂10/7/75 -- αV redraws the screen on Data Disc displays without erasing.
αβV still erases before redrawing.

∂10/7/75 -- ⊗XBURP command causes RIPPLING to discard any whole records
of nulls from the current page only.

∂10/7/75 -- Macro defining and calling commands (⊗XDEFINE and ⊗Y) save
the user from having to type the same sequence of commands several times.
See p. 25. 

∂10/9/75 -- Punctuation-at-end-of-line bug in XJUST command fixed.

∂10/16/75 -- Bug fixed in macro calls.

∂10/17/75 -- Un-copy-attach bug fixed. 
An attempt to detach more lines than are in the ATTACH buffer no longer
causes trouble. The current line cursor may not be left where you expect
it to be but E does not blow up.

∂10/28/75 -- E now permits lines containing up to 133 characters to be
transfered to the line editor for editing (the previous limit was 120).

Lines longer than these limits may be broken up by XJUST and XJFILL
commands.  Their lengths may be ascertained by the XLINCNT command.

∂11/11/75 -- Automatic directory updating for extended files.
If you edit with E a file that has been extended by some other
program, E will automatically update the directory.  However, the
updated directory will not be written out until some other page of
the file has been changed and is being written on the disk.  The
extended part of the file must be formatted correctly for E, which
simply means that any formfeeds found in that part of the file must
occur as the first character in a (200-word) record; otherwise, the
file must be reformatted and a new directory generated.  When a file
has been extended properly, E will say how many pages have been
added to the file, or if none, how many records have been added to
the last page.

∂11/13/75 -- XSPOOL and XXSPOOL commands, will now spool the ATTACH buffer.

∂11/20/75 -- E files extended by other programs.
E can handle easily almost any file that has been extended by
another program even though the directory has not been updated by
that program.  The single restriction is that the file must remain in
correct E format with Formfeeds occurring only as the first
character in a record.  MAIL and RCV extend files ok.  See p. 28.

∂11/20/75 -- The trailer line on the screen has been changed.  See p. 5.

∂12/5/75 -- When more than 8 files are referenced, by file switching
commands,  E  now gives the new file the referencing number that was
assigned to the longest-unreferenced file.  The user is warned of this
reassignment.

∂12/11/75 -- A new X command, XPROTECTION, is now available.
See p. 18 for details.

A warning is given when one enters a file that has the 400 protection
bit set (such files are not saved by DART).

∂12/12/75 -- New X commands: XMAIL, XSEND, XREMIND.  See p. 18.

∂12/14/75 -- XMARK now works in ATTACH mode.  See p. 18.

1976

∂1/16/76 -- Several new extended commands have been added
to allow TTY/Imlac users to execute commands that previously were
available only through certain characters not generally typeable on
TTYs; see p. 29.  The XMARK command and XINSERT and β<FORM> are now
illegal in /N mode; they always used to die horribly in /N mode
anyway (will be fixed eventually).  Bug in \ command fixed to clear
ESC I flag and clear search page number at top.  XEXIST and ∃
commands includes "R" for current file if open in Readonly mode (for
ttys).  /N included in filename displayed when in no-directory mode.
Various other improvements in tty/imlac service.  XTYPE command (old
command) now accepts search distance as amount to type out; mainly
useful in conjuction with new XMSG (XPARTIAL) commands:
XMSG<cr>XTYPE<cr> will type out current message in mail files, or
current page if no ∂'s.  Certain filehacks (eg, \GRIPES) can be
typed to E where filename is expected; allows easy abbreviation of
names of certain files on [2,2]--see p. 30.

∂2/4/76 -- New commands XLPAREN and XRPAREN.  See p. 22 for details.

∂2/13/76 -- Changes to commands FF, VT, L, T, B.  New commands ∧ and ∨.
All users are urged to refer to p. 7 for details of these changes which are
quite extensive and which make window moving much easier.

∂2/14/76 -- Searching from first character on line.  Null substitution.
The old E bug causing searches to ignore the first character of the
current line is fixed!  Also, the null substitution string bug has
been fixed completely now (we think).

∂3/19/76 -- The old limit of 511 characters on a line has been removed.

XBREAK will break lines (of any length) at specified column position.  See p. 12.

The XJOIN command has been modified to join lines without introducing
spaces for deleted CRLFs.  (It now undoes an XBREAK.)  See p. 12 for details.

Up to 23 marks in a file allowed (page and line numbers limited to 262142).

The repeat argument limit of 510 has been increased to 262142.

The ≤ and ≥ commands now take repeat numeric arguments.

The Z command (Imlacs only) now accepts a numeric arg which causes an
L command to be simulated with that (relative or absolute) arg first.

∂3/22/76 -- New switch /13E begins edit at end of page 13.
/E (no argument) begins edit at end of the file's last page.

An old bug has been fixed that caused characters to be lost from the middle
of a message file when rippling occurred if the file was bigger than 8K.

Any number of substitutions can now be done explicitly and E will
no longer stop and request confirmation after 100 have been done.

∂4/6/76 -- Several minor new features.
A page bloated by more than 18 records will automatically be burped
   when written out.
⊗#⊗V waits # seconds after displaying screen if # is positive; useful in macros.
Bug fix in macro expansion for αK and αS followed by activator.
⊗T and ⊗B made legal from line editor, but they will not move arrow
   in that case; that is, the arrow line will not glitch past edge of
   screen when these commands are given from the line editor.
⊗G and ⊗π commands removed (they have never been documented,
   so don't look for them).
Window position (as well as arrow line) maintained on exit followed by CONTINUE.

∂4/9/76 -- More minor changes/bug fixes.
After E has made you confirm a null substitution command, it no longer
   forces the first substitution to be done with the line editor.
⊗R command (replace attach buffer) no longer dies if you have switched
   files.  Gives error message instead.
⊗XRSYS ⊗XRUN ⊗XTV commands fixed not to spuriously set "command given
   from line editor" bit when swapping in new program.
⊗XBACKGO command modified to restore window position on page returning to.
α<space> in macros has been fixed (was broken when αK was fixed on 4/6/76).

∂4/11/76 -- Line redrawing bugs fixed.
For a long time (since last summer), E has failed to redraw (on DD) any
line which was entered into the line editor with a non-line-editor
command (commands other than αS α<space> α<tab> etc.) and which was
activated with altmode.  This bug has finally been fixed, and it is now
claimed that all line-redrawing bugs have been fixed.  If you see E fail
to correctly display one or more lines, please report to ME exactly what
you did to make it lose.  Thanks--ME.

Also fixed is the failure to redraw the attach buffer when ⊗-⊗C is given
with more than 8 lines attached.

∂4/22/76 -- Lots of bugs fixed, mostly in /N and multipage modes.

Approximately 20 bugs have been fixed, including at least 3 in /N mode
operation and at least 10 in multipage mode operation.  It is now
believed that both of these modes should be completely reliable!
Multipage mode involves having two or more consecutive pages in core at
the same time and is invoked by the commands β<FORM>, XINSERT, XAPPEND,
XDELETE and XMARK; all of these commands were formerly capable of causing
trouble, although the trouble in certain cases would not be noticed until
you tried to write out a page.  All of these should work in all cases
now, including multipage mode in a /N file.

Other new features:

The line and page numbers on the trailer line are now kept current with
respect to the arrow line, even in multipage mode.  The header line now
lists the range of pages in core in multipage mode, and the line number
that appears on the header line is relative to the beginning of the whole
range, not the arrow line's page.  The total number of pages displayed on
the trailer line in a non-formatted file (/R) is changed from "?" to the
actual number as soon as the actual number is known.  The record and
character counts usually displayed on the trailer line are suppressed
(replaced by ?R) when editing a non-formatted file (in /R mode).

The R command (Replace attach buffer) no longer leaves multipage mode if
the original page from which the attach buffer came is one of several
pages in core.

The new XALIAS command can be used to change your alias PPN.  It takes a
following text argument in exactly the same form as the system ALIAS
command: 1) PRJ to set project to PRJ and programmer to logged in name,
2) PRJ, to set project to PRJ and retain previous alias programmer name,
and 3) PRJ,PRG to set both project and programmer.  Note that the XALIGN
command forces at least ALIA to be used in the name of the XALIAS
command.  The XALIAS command types out your new ALIAS on both the current
piece of paper and PP 0 so that you will see your changed alias when you
exit.

Saying "N" to all three questions about formatting a non-formatted file
that you are trying to switch to no longers causes the attach buffer to
be spuriously discarded and the screen to be reset to the normal piece of
paper.

If you switch away from a /R file when you have made changes to the
current page, E still does not write out that page nor does it ask you
what mode you intended, BUT it does give a warning that the changed text
was not written out.

The new #XAUTOBURP command sets the threshold number of records of nulls
for autoburping to the number # specified.  A zero or negative arg
disables autoburping entirely.  An arg of just "+" sets the threshold to
its default value, which is currently 19.  If no arg is given, E will
simply type out the current threshold.  (A page to be written out that
has the threshold number of records of nulls, or more, will be
automatically burped to delete all records of nulls from that page.)

αD used in macros to delete a CRLF has been improved.  To work
completely, however, it must be preceded by a α<tab> (or αK<cr> or
αS<cr>) which is not separated from the αD by any character with control
bits.  E.g., α<tab>XYZαD and α<tab><bs>XαD will work properly, but
α<tab>α<bs>XαD will not do the right thing in certain cases.  Note that
it is only in macros that αD doesn't always work--plain typeahead still
works perfectly.  (The effect of bad uses of αD is that characters after
the αD in the macro definition up through the first activation character
following are not "typed" until the macro expansion ends, which can be
particularly noticeable if you use a repeat argument on the ⊗Y command.)

A warning message is generated at initialization time if the upper
segment is not write protected or if the upper segment checksum is not
correct.

∂4/23/76 -- Bug fix to attaching text in non formatted file.
Attaching text in a non-formatted file and then switching files and
putting down the attached text used to cause a "former WRITE CODE
ERROR" if the page in the non-formatted file did not end with a CRLF.
This bug has been fixed.

∂4/27/76 -- Filename scanner cleaned up.

Partially specified filenames are now parsed correctly.  This mainly
fixes the parsing of filenames like "FOO[1]", in which the programmer
name assumed is now always your alias programmer name.  Also, devices
(such as "UDP:") found in TMPCOR files are no longer sticky--you must
specify UDP: each time you want it.

∂4/27/76 -- Change to effect of αL and αP in multipage mode.
(Note that αβL and αβP are unchanged.  TTY users note that the effect you
now get with the L and P commands is that of αL and αP as described below.)

The αL command will go to the specified line on the current page, which
is defined as the page the line you are pointing to is on.  Thus if you
are on line 3 of page 4, then ⊗1⊗3αL will move the arrow down 10 lines
(to line 13), but not beyond the pagemark for page 5, whose line is
considered to be on page 4 like the row of asterisks at the end of the
last page in core.  The αβL command moves to the specified line within
ALL of the text in core, treating pagemark lines like normal lines; for
example, just αβL will always move to line 1 of the first page in core
whereas αL will always move to line 1 of the current page (defined by the
arrow).  If you have only one page in core, αL and αβL are identical.

The αP command will not flush the incore page(s) if the requested page
is already in core.  In this case, the arrow will simply move to line 1
of the specified page.  The αβP command always flushes the incore pages
and reads in exactly the one page requested.

∂4/30/76 -- αβI and αβ<cr> at beginning of line editor changed.
These commands no longer insert a blank line ahead of the new blank
line about to be edited in line insert mode.  This change only
affects the results of giving either of these commands from the line
editor when the cursor is at the beginning of the line.

Also, a bug has been fixed that previously prevented ending a find
command with a line editor command when the current line was either
blank, a pagemark, or the row of asterisks at the end of a page.

∂5/11/76 -- XSPOOL XXSPOOL XMAIL XSEND XREMIND now take numerical args.
These commands used to output as text either the whole attach buffer
or the whole page.  Now, however, a preceding numerical argument to
any of these commands specifies the number of lines to be output
(spooled or mailed).  If any text is currently attached, the output
will consist of the specified number of lines at the beginning of the
attach buffer; otherwise, the output will consist of the specified
number of lines (from the page) starting at the current line.  As
before, if no argument is given, the output is either the whole
attach buffer (if any) or the whole page.  The argument to these
commands can be specified by a search command (⊗F ⊗XFIND or ⊗∂) just
as can be done with the commands ⊗A (attach) ⊗C (copy) and certain
others.  For example, ⊗∂⊗XMAIL PRG<cr> will mail the current message
to PRG.

Note: a zero or negative argument to MAIL, SEND, or REMIND can be
used to send a one-line message entirely from the X-command line (no
text from page or attach buffer sent).  To do this, you MUST separate
the message text on the command line from the command itself with a
Formfeed.  For example, ⊗0⊗XSEND ME<ff>Hey, it really works!<cr> will
send ME the message "Hey, it really works!"  This technique can also
be used to include a subject line or initial text line ahead of the
message text being output from the page (or attach buffer).  That is,
⊗∂⊗XMAIL/SUBJECT PRG<ff>Sending mail from E<cr> will mail the current
message to PRG with the subject "Sending mail from E".

A bug has been fixed in macro expansions that involved typing the
line editor command αK or αS as the first character on a line.

The ⊗V command now redraws the screen immediately, whether typeahead
is present or not.

∂5/18/76 -- XSAVE command added--writes out page & attach buffer in E$SAVE.TXT.
This new command saves the current state of your incore page text,
including any attach buffer text, in the file E$SAVE.TXT on your LOGIN
disk area.  This is now done automatically for almost all fatal errors
detected by E; when it happens as a result of such an error, a message
to that effect is typed out.  (The file E$SAVE.TXT may NOT be written
out successfully if the error is detected again while writing this
file.)  Note that any previous E$SAVE.TXT file is superseded (replaced)
by the new file.  Note also that this command (and its automatic call
upon error detection) does NOT touch the file you currently have open
for editing.

A bug has been fixed that (rarely) caused rippling when unnecessary.

The maximum size of a macro definition has been doubled to 239 characters.

∂5/25/76 -- Leading tab on line means new paragraph during justification.
A bug has been fixed that caused lines beginning with a tab not to be
interpreted as the beginning of new paragraphs in justification.  Tabs were
correctly recognized previously only on the line the arrow pointed to.

∂5/27/76 -- New directory search command: ⊗F<string>⊗: finds labels.

This command will search the directory and go to the page for which the
<string> is found.  Then it will search that page for an occurrence of
<string> immediately followed by any of ":", "=", or "←".  Thus, labels
such as START: or definitions such as START=10 or START←10 can be
found easily if START occurs on the page's first (directory) line--use
the command: ⊗FSTART⊗: (as usual, αβF finds a delimited string; the ":"
will be detected correctly if it is the ending delimiter).

Also, both the ⊗F⊗P and ⊗F⊗: directory search commands has another form
to cause E to search only directory lines for pages following the
current incore page(s).  The form to get this effect is ⊗F<string>⊗+⊗P
or ⊗F<string>⊗+⊗: (that is, precede the ⊗P or ⊗: immediately with ⊗+).
This is useful when a string occurs on several directory lines.

∂6/1/76 -- Minor bugs/features fixed.

⊗∂αβD given on an empty incore page will now delete the page itself.
Formerly, this command was a no-op on a empty page.

An ET<cr> command which finds that the file named in TMPCOR is gone
(e.g., deleted) will no longer look for another file with different
extension.

The ⊗∂ command will not go beyond an incore pagemark.

αβD has been repaired to preserve the location of marks beyond the
line(s) that are being deleted.

The directory search commands (⊗F⊗P and ⊗F⊗:) now work correctly in
multipage mode.

∂6/3/76  --  <CR> at end of page no longer adds a line--use β<CR> or αβ<CR>.

This change allows <CR> to be used near the end of a page without the
risk of changing the page (setting the W flag) by accident.  To add a
blank line when you are at the end of a page, use β<CR>.  To add several
blank lines, use ⊗#αβ<CR> (which adds # blank lines).  To add text at
the end of the page, simply type over the row of stars as before; when
you activate that line with anything but <ALT>, its text will be on a
newly added line just like always.  To add lots of text at the end of a
page (or, for that matter, anywhere in a page), type αβ<CR> to enter
line insert mode.  MAIL your COMPLAINTS or COMPLIMENTS to ME.

Now, when you leave a READONLY file from a page which had been altered
(W flag on), you get the standard message:
	SORRY -- PAGE HAS BEEN ALTERED -- PLEASE REAFFIRM MODE.
You can then type either READONLY or READWRITE to determine whether the
altered page will be written out.  Formerly, changes to such a page
where simply ignored and you had no chance to write them out after you
had given the command to change files.

The ε and λ commands not preceded by a numeric argument now update the
display before reading the new filename unless a whole line (the new
filename) has been typed ahead.

An <ALT> response to any of the questions about formatting implies NO to
that question and suppresses any remaining questions, thus letting you
immediately enter a new filename without having to say NO three times.

∂6/26/76 -- ⊗XHEIGHT command

This new command, preceded by a numerical argument, sets the number
of lines of display to use for text.  This is especially useful on
IIIs to reduce flicker.  For example, ⊗2⊗0⊗XHEIGHT<cr> will cause E
to use 20 lines for displaying text.  Minimum size is 10 lines (since
attach buffer can use 8).  Maximum is terminal dependent.  ⊗XHEIGHT
without an argument will reset to normal size.

∂8/8/76 -- A potential bug occasionally resulting from deleting several
in-core pagemarks has been fixed.

∂8/20/76 -- DMs are now considered displays by E.

There are 17 lines for text in E on DMs.  There is no arrow for the
current line; only the position of the cursor under the first character
of the line indicates the "arrow" line.  Thus there is no easy way to
tell the difference between editing a line with the cursor under the
first character and not being inside the line.  Later, the DM line
editor will be displayed as bold, so it will be easy to tell when you
are inside a line.

Since there is no arrow, there is no double arrow for line insert mode,
and there is essentially no way to detect that you are in line insert
mode, except that when you type CR, a new line is inserted.  However,
this shouldn't cause any difficulty since the commands legal in line
insert mode are exactly the same as those legal in line edit mode.

Attached lines are indicated by displaying them as bold or blinking
(blinking if you haven't had your DM modified, bold if you have) instead
of preceding them with a vertical bar.  Attached blank lines are
slightly difficult to detect since a bold or blinking blank is still
blank.  In attach mode, the cursor is returned to the page printer at
the bottom of the page.

Whenever E has to redraw the whole screen on a DM, any display output
still going is flushed since it would be overwritten anyway.

When E doesn't have to redraw the whole screen, it is possible that it
might fail to leave the line editor correctly displayed if you have
typed ahead.  You can always correct the line editor display by typing
ESC R (i.e., NULL R).  If the screen text displayed is also screwed up
somehow, αV (i.e., EDIT V) will redraw the screen correctly.

∂8/20/76 -- Line editor no longer erased on DD/DM when activated while editing text.

Thus, the version of the line editor that appeared when you activated it
will be left on the screen.  This is convenient if, for instance, you
are doing multi-page searches from the line editor and want to look at
the final version of the line you edited while the search is running.
Note that if you typed ahead a lot and it had not all appeared yet when
you activated, then you may not actually see the final version of the line.

∂9/5/76 -- Major changes have been made to the JUSTification commands, and
7 new  commands have  been added.   The new  features greatly  extend  the
usefullness of  these  commands so  that  text  in unusual  forms  can  be
handled.  Many of the defects and  shortcomings of the older version  have
been corrected.  Report any bugs to ALS.

    The more  important changes  that  will affect  all users  are  listed
below.

1)  Left margins are now  specified as indents,  not as column  positions,
    that is, if one wishes  to specify that the line  is to start with  no
    indent one  types 0  not  1 as  formerly.   This makes  all  commmands
    consistent.  Right  margins are  still in  terms of  column  position.
    Specifications are now  always sticky and  the initial default  values
    are 4,0,74.

2)  It is now possible  to specify the  number of blank  lines to be  used
    between paragraphs.  The default condition is (as before) for there to
    be the same number of blank lines in the justified text as there  were
    in the original and this is signalled by a -1 as the fourth number  in
    the specifying  string (4,0,74,-1).   Existing specifications  can  be
    seen by typing a justifying command specifying 0 lines.

3)  Switches are now used to change the way that  E  detects the start  of
    a new paragraph.  The default  switch N (for Normal) approximates  the
    conditions formerly used.  Blank lines still signal a paragraph  break
    (as they do  for all  switches).  Instead of  requiring a  TAB as  the
    first character (when bank  lines are not used)  any indent ≥2 is  now
    taken as  a crown  line.  Other  switches allow   E  to  asertain  the
    existing indent conditions from  the text itself and  to use these,  A
    for arbitrary, conditions to signal new paragraphs.  (Try typing ⊗0⊗XJU
    to see how the switch setting is reported.)  Read p. 16  before trying
    to use any other switches.  People who like to use blank lines only as
    new-paragraph indicators and who want their text left with no indents
    can achieve this condition by typing A 0 as a following string after
    their first JUST command (separated fron the command name by a space).  

   (See p. 32 for a longer list of changes and  p. 16:18 for full details)

∂9/20/76 -- DM line moving hardware utilized.

On DMs, when lines on the screen simply need to be moved, the DM
insert/delete hardware for lines is used to avoid having to redraw any more
text than necessary.  This involves some attempt at optimization of which
lines get moved and which redrawn when lines on the screen need to be
moved across each other (which cannot be done).  Bugs to ME.

∂10/4/76 -- Improvement in use of DM hardware; "∞" accepted in switches.

You can now use "∞" (infinity-sign) as a value in a switch, e.g., /∞P.
It represents a very large positive number and cannot be negated.

On DMs, the line-moving hardware is now NOT used unless it results in
saving at least 10 output characters.

∂10/10/76 -- Three minor bugs fixed.

1)Fix to ⊗F⊗P to remember control-bits on ⊗F for subsequent ⊗* commands.
2)Test for line-too-long-for-line-editor made slightly more conservative.
3)Fix to not screw up when FF found in last word of record in /R file.

∂10/21/76 -- New /S switch; also /N switch no longer needs confirmation.

1)Formatting of /N files no longer needs to be confirmed by user.
2)New switch /S means edit new file at Same line & page as at in current file;
  for example, if you are at line 12 on page 15 if file FOO and say
  ⊗εBAZ/S<cr>, then the arrow will be positioned at line 12 on page 15 of BAZ.

∂11/15/76 -- New command ⊗XEXACT causes searches to distinguish case of letters.

The new extended command ⊗XEXACT causes any subsequent searches to
distinguish between upper and lower case letters.  Searches will succeed
only if the searched text contains the same cases of letters as given in
the search string.  The command ⊗-⊗XEXACT will disable this feature and
thus cause searches to ignore the case of letters.

Also, the default paragraph indent for the justification commands has been
changed back to its original value of zero (it had recently been 4).

1977

∂1/5/77 -- A bug in XBREAK has been fixed.  If an attempt is made to break
a line in the middle of a TAB the break precedes the TAB except for the
unusual case where the first character is a TAB and the BREAK value has been set
at less than 8.

∂1/8/77 -- Two new commands XTIN and XSIN have been added.  TIN puts
Tabs IN, in place of spaces when this will save space and when it is
allowable.  This may make it possible to save space on the disk, 
providing, of course, that the TIN command is followed by an XBURP
command.  SIN puts Spaces IN, in place of TABS.  See page 19 for details.
Either command may take an argument, with the default value being the entire
page or ATTACHment.

∂1/12/77 -- The substitute command now handles long lines and will not let
you substitute for a CR (found, for example, by the use of the "any
delimiter" symbol "|").

∂1/15/77 -- MARKS on deleted or attached lines are now moved to the first line
after the deletion or attachment. XCANCEL restores marks with the restored page,
of course, only if the marks had been previously saved by an αβ. command or by
switching pages.

∂1/17/77 -- Two very old bugs fixed:  one in free storage routines and one
in directory line maker (called when you change first line on page or edit
/R an unformatted file).  Also, ∃ command now always reports the index
number of the Home file.

∂1/21/77 -- Line MARKS now stay with the right lines during αβXAPPEND, β<FF>
and αβD (as applied to an in-core FF) operations.  They are still adversely
affected by XBREAK, XJOIN, XJUST and related commands.

∂2/5/77 -- Two new commands ⊗XNDFAIL and XNDSAIL generate and insert a new
first line (appropriate for the directory) in appropriate FAIL and SAIL
formats for labels and for specified categories.  No new line will be
generated if the page is empty.

These commands apply to the current page but if more than one page is in
core (through the use of XAPPEND or **<ff> commands) then the information
will be gathered from only that page in which the current line is located and
the information will appear as a new first line on this page. Note: this was
changed on 3/15/77.

	The XNDSAIL command may be used as an information source in a variety
of different ways.  It is not intended for use with text material.

XNDFail, given with a <cr> termination, lists all labels.
	Given with a α<cr> it lists only those labels that have one or more ↑'s
	Given with αβ<cr> it lists only those labels with ↑↑ (or more).

	This command does not take arguments (unlike XNDS).  If the command is
	typed with a prefix argument of 0, it states the conditions outlined
	above and is otherwise a NO-OP.

XNDSail, given with a <cr> termination, lists all words that are preceded by
	certain catagory words, the default words being RECORD!CLASS,
	RECORD_CLASS and PROCEDURE.

	Having found a catagory word the program lists the first word following
	the catagory word and then ignores any following text until either a comma
	or a semicolon is encountered.  When a semicolon is encountered the search
	for a new catagory word is resumed.  If, on the other hand, a comma is
	encountered (not however within parens) then the next word is taken as
	another example of the catagory and it is listed, preceded by a comma.
	Listings following different catagory words are saparated by spaces.

	One additional category may be specified by typing its name after a
		space following the command name and terminating it by a <cr>.
	Up to 4 new categories may be specified with the categories after
		the first one replacing the default categories, one by one.
		To retain some default categories the list is terminated by a <cr>
	If the typed list of categories is terminated by ⊗<cr> then only the
		typed categories are used, and the default ones are eliminated.
	If the command is terminated by ⊗<cr> without any typed category names
		then the original default categories are reinstated.
	If given with a prefix argument of 0 this command will accept any typed
		categories and then will list the categories that are in effect
		without generating a text line.

∂2/11/77 -- The system command ET? now gets the E manual E.ALS[UP,DOC] directly.
		
∂2/16/77 -- The method of loading E on an ET command has been changed.  The
 system no longer needs to find space for an upper segment which it would
 end up not needing, if some one else is already useing E.  Now only a lower
 segment is loaded, and code in this section checks to see if there is already
 an upper segment.  If there is, no new segment is loaded.

∂3/8/77 -- At the end of a line of text, the following line editor commands
no longer activate uselessly:  α<TAB>, αS, αK, αR, and META-<plain char>.

∂3/8/77 -- Reporting of FIND and related commands has been augmented to
show "(observing case)" or "(ignoring case)" depending on the state of the
EXACT switch.  The fact that the search was for a delimited string is now
indicated by the use of "|" instead of the usual "\" delimiters (which are
still used for an undelimited string search).

Furthermore, a zero argument to any of the Find or Substitute commands
(⊗0⊗F, ⊗0⊗XFIND, ⊗0⊗*, ⊗0⊗\) will simply cause the search and/or
substitute string for the given command to be typed out.  Note that ⊗0⊗F
thus does not take a following search string argument.

∂3/8/77 -- E can now be in any one of three possible reporting states.
The reporting state determines how much information E types out at various
times.  The three states are: the normal default state, a verbose state
achieved by the command ⊗XVERBOSE and a terse state achieved by the
command ⊗XTERSE.  The normal state can be restored by giving either
⊗-⊗XVERBOSE or ⊗-⊗XTERSE.  You can find out the current state by giving
either ⊗0⊗XVERBOSE or ⊗0⊗XTERSE.  The normal state now does somewhat less
reporting (that is, less typeout) than formerly, especially for the
parenthesis commands.  However, a new command ⊗XPINFO has been added to
give you the details of the last parenthesis command (or use ⊗XVERBOSE).

No error messages are ever suppressed by the terse state.

The following remarks are currently suppressed only in the Terse state.

	Only one MARK and you are there!
	There are no marks!
	Already marked!
	Not marked!
	All marks have been cleared.
	Removing last MARK on this page.
	MARKS on this page only have been cleared.
	Page is empty.  (XNDFAIL, XNDSAIL cmds)
	Aborting macro ... (error occurred in macro while in ⊗XSTOPONE mode)
	Abort of # macros requested from ... (⊗#⊗XABORT cmd given)

The following remarks are typed out only in the Verbose state.

	N characters added/removed (justify commands)
	Line now has N chars. (join)
	You have replaced XXX with YYY (substitute)
	(detailed reporting of the parenthesis commands--use new ⊗XPINFO)
	The new line of N chars lists M items (new directory line commands)
	Calling ... (calling a macro)
	Ending ... (a macro has finished)

Suggestions other informational remarks to suppress will be accepted.

∂3/15/77 -- Bunch of small fixes and a couple of new features.
 Left- and right-arrow cmds made to use search length arg.
 "I" displayed on header line while in line-insert mode (especially for DMs).
 Fix to prevent inputting of BS in a line of text.
 Multipage fix to NDFAIL and NDSAIL commands.
 Fix to updating of trailer line.
 Fix to XRUN and XRSYS cmds to use default extension of DMP to return RPG starts.
 Fix for ambiguous extended command given from line editor.

∂3/30/77 -- Preparations for expanded macro facility.

⊗XEMPTY and ⊗XNONEMPTY commands have been added to move to next empty or
non-empty line.  A repeat argument will cause these commands to look for
that many empty (or non-empty lines).  A negative arg will cause the
search to go backwards.  A positive arg (or default of 1) will ignore the
current line and search from the next line, but will not cross a
subsequent incore pagemark; hence the search is of only one page.  These
commands can also be used, both inside and outside macros, to tell if the
current line is empty--use a zero arg:  ⊗0⊗XEMPTY is a no-op if the
current line is empty, but will say something and stop any running macro
if the current line is non-empty; ⊗0⊗XNONEMPTY is a no-op if the current
line is non-empty, but will say something and stop any running macro if the
current line is empty.  The reason for these new commands is that soon it
will become legal for line editor commands to be used to get into the line
editor on empty lines, thus those commands will no longer stop macros on
empty lines.

 Also:

 E now enables wholine filestatus during rippling.
 Some multipage fixes to justify and TIN and SIN and TABLE commands are now in.
 CETV FOO←BAZ has been made equivalent to ETV FOO←BAZ.
 Line too long for line editor tells how long it is.

∂4/4/77 -- Several minor bugs fixed.
 Location to return to by XBACKGO command preserved over page deletion.
 Fix to CONTINUE after exit (and XCLOSE) to ensure file hasn't changed.
 Fix to CONTINUE after LOOKUP error.
 Fix to XBURP command and autoburping to make them work in all cases.
 Fix to avoid infinite loop when detached.

∂4/7/77 -- More preparation for multiple macros, plus some minor improvements.

 Line editor commands have been made legal when pointing to an empty
 line.  The important things to note are (1) that αD given when pointing
 to an empty line will delete the CRLF and leave you with the following
 line in the line editor, (2) that αI given when pointing to an empty
 line will enter line insert mode there, and (3) the commands αS and αK
 given when pointing to an empty line still take a following arg (to
 search or kill to) although such a search or kill on an empty line is a
 no-op.

 An "A" is now displayed on the header line when in attach mode.
 Display lines not used with a short page in core on a DM are correctly erased.

∂4/10/77 -- Change to ⊗XMARK command in attach mode at top of page.
 To facilitate moving pages around in files, the ⊗XMARK command given
 while in attach mode first puts down the attach buffer and then
 inserts the pagemark.  However, now if you are at the beginning of a
 page when you do this, the pagemark will be inserted beyond the
 put-down attach buffer, so that in this case, you will end up with
 the lines that were previously in the attach buffer now on a page by
 themselves.  Formerly, in this case you would have ended up with an
 empty page with the ex-attach-buffer text on the next page.

 A bug has been fixed which caused a line not to be redisplayed when
 altmode was typed from line insert mode on a DM.

∂4/28/77 -- One new command (!) and several small fixes.

The exclamation-point (!) command has been added to operate on paragraphs
in the same way that the partial-sign (∂) command operates on messages.

    NOTE: "PARAGRAPH" here means a contiguous group of non-empty
    lines plus certain surrounding empty lines (if any).
    Included in the paragraph of the ! command are: one empty
    line (if any) at the beginning of the paragraph and all but
    one of any empty lines at the end of the paragraph.  Thus
    within a group of continguous EMPTY lines, only the last
    line is really considered by the ! command to be non-empty.

The two commands ! and ∂ don't actually do anything until you type another
command.  If that following command accepts a search distance argument,
then the effective argument will be the number of lines in the current
paragraph (! command) or message (∂ command); for example, ⊗!⊗XJUST<cr>
will justify the current "paragraph".  If the command that follows ⊗! or
⊗∂ does NOT accept a search distance argument, then that command is
carried out after moving to the beginning of the next paragraph (!) or
message (∂).  The one case in which the ! and ∂ commands don't take a
following command is when a preceding zero argument has been supplied
(that is, ⊗0⊗! or ⊗0⊗∂), in which case the command immediately moves to
the beginning of the current paragraph (!) or message (∂).  Like the ∂
command, the ! command will delete the current pagemark if you attach or
delete all the text on the page with this command.

Other changes to E:

The <vt> character is now treated as an ordinary character by the various
justification type commands (XJUST, XJFILL, XTIN, etc).  This character
will display as an integral sign although it is typed out or listed as a
vertical tab (i.e., several linefeeds).

Two minor justification bugs have been fixed.  The arrow now always stays
where it should on XSIN commands, and two spaces are now always left after
punctuation ending a sentence during XJUST commands even if the
punctuation occurred at the end of a line in the original text.

PAS (PASCAL) has been added to list of standard filename extensions looked for.

ETV <FILE1>→<FILE2> now works again (provided <FILE1> has a directory).
This copies <FILE1> into <FILE2> and then edits <FILE1>.

Altmode typed in the middle of a line in line insert mode now saves the
text of that line.  Thus altmode given in line insert mode will now only
delete the current line if that line is completely empty.

∂5/6/77 -- Line marks now saved and restored via TMPCOR file; other minor fixes.

 A new switch of the form /a,bM places a mark on page a at line b.
 This is used in E's TMPCOR file to save and restore all line marks.

 Old bug fixed that caused wrong device to be kept open when file not found.
 Cleaned up αM command to avoid losing if page or line of mark doesn't exist.
 Line editor cmds made illegal once again if pointing to end of page (for macros).
 ⊗XBACKGO fixed for several cases where it used to return to the wrong right place.

∂5/9/77 -- Macro expansion fixed to know about new line editor commands.

 Also, ⊗XXSPOOL now uses the system default font.

∂6/2/77 -- Improved macro facilities with named, recursive macros.  See pp. 25-26.

 Also:

 RPG startup with zero filename causes E to read (and later write) TMPCOR file.
 Bug fix to ! and ∂ commands when given from inside line editor.
 Minor bug fix to NDFAIL,NDSAIL commands in case where previous dir line was empty.
 Exiting not allowed during macro expansion.
 Blank lines at end of page now considered part of prev paragraph by ⊗! command.
 Fixes to prevent spurious /N or /#F typed out when file not found.
 Fix to return home to right place when left home with multiple pages in core.

∂7/3/77 -- Greatly improved disk buffering (using caches) on input and output.

 Also:

 Added .MID (MIDAS) to list of desired extensions.
 Added .FNT and .CFT (fonts) to list of undesired extensions.
 Attaching/copying/releasing fixed for case where next line is a pagemark.
 Fix to avoid free storage error if indirect file ends with incomplete macro def.
 Fix to infinite repeat arg for macro calls; max repeat arg limited to 131064.

∂7/14/77 -- One new command, a slight mod to the ⊗! command, and a fix to ⊗XBREAK.

 ⊗XWRITTEN command added to find out when the current file was previously
   written and who did it (PPN and jobname).
 The ⊗! command now never deletes a pagemark (the ⊗∂ command still does).
 The ⊗XBREAK command now breaks properly lines in which a tab reaches
   exactly to the break limit.

∂7/27/77 -- Extended searches in unformatted files are much improved.

 Formerly, it was possible for an extended search in an unformatted file
 to fail to find an existing occurrence of the search string, or worse,
 for an ill mem ref to happen when it did find it.  Both of these bugs
 have been fixed.  However, note that extended searches in unformatted
 files still cannot go beyond the last page that you have looked at.
 The directory is used for finding where each page starts in an extended
 search, and the directory will only be complete out to the last page
 that you have actually gone to.  Thus, to make sure extended searches
 can go all the way to the end of the file, you should first move to the
 last page of the file (allowing E to generate the complete directory)
 with a command like ⊗∞⊗P.  This does not apply to any file that already
 has a valid directory, nor to any file being edited /N.

Also, a couple of other bugs fixed:

 Fix to prevent infinite loop when doing ⊗-⊗P from directory page in
 unformatted file.

 Minor fix to filehack parser.

∂8/3/77 -- Couple of rare bugs fixed.

 Fix to ⊗XAPPEND to disallow editing of pagemark from newly appended page.

 Fix to ⊗Q command to do nothing if previous line is a pagemark.

∂8/14/77 -- Minor fixes.

 Fix to make sure trailer values get updated when switching files.
 Doesn't say "Are you sure that ... will approve" if not overwriting old file.
 Slight fix to DM display routine to force redrawing line below line editor.
 Fix to avoid spurious retyping of last line on non-displays.

∂8/19/77 -- Improvements for non-display users; slight changes to old commands.

1. To allow substitution commands to be given from non-displays, E now
accepts a LINEFEED AT THE END OF A SEARCH STRING to indicate that a
SUBSTITUTION STRING IS COMING next.  Thus, the following commands are
equivalent (although the first is difficult or impossible to type on a
non-display):

	αFsearch stringα\substitute string<cr>
	αFsearch string<lf>substitute string<cr>

Similarly, the following multipage substitute commands are equivalent:

	αXFIND search stringα\substitute string<cr>
	αXFIND search string<lf>substitute string<cr>

2. A non-display user can now execute commands that require use of
particular combinations of the "bucky" bits CONTROL and META.  Two new
extended commands are used to specify what bucky bits are to be assumed
with the next command character.

	⊗XCONTROL<cr>	    causes the next character to have only
			    the bucky bit CONTROL.

	⊗XMETACONTROL<cr>   causes the next character to have both
			    bucky bits META and CONTROL.

If neither of these commands is used on a non-display, a command that
makes a distinction between CONTROL and META-CONTROL will execute the
CONTROL version; and a command that distinguishes between any bucky bits
and none at all will execute the no-bucky-bit version.

Here is an example of using the ⊗XMETACONTROL command to do a delimited
search (and a substitution); the command

	XMETA<cr>Fthis<lf>that<cr>

will find a delimited "this" and substitute "that".

3. To facilitate unambiguous abbreviation of the new ⊗XCONTROL command,
the old ⊗XCONTINUE command for resuming macro expansion has been renamed
to ⊗XRESUME.

4. Two new responses are now acceptable replies to the various Yes-or-No
questions about formatting that E asks when you try to edit a file that
doesn't have a directory.  You can say /R to have E edit the file in
Readonly mode, or you can say /N to have E edit the file in No-directory
mode.  NEITHER OF THESE TAKES A CARRIAGE-RETURN.  These new responses save
you the trouble of waiting for the appropriate question to come up.  They
are also useful if you accidentally answer the appropriate question with
a No.

5. ESC I will now interrupt any multiple substitution (even a one-page
type) after the next substitution.

∂8/20/77 -- New ⊗O command is just like ⊗XBACKGO<cr>--goes back to Old page.

 Also:

 ⊗XBACKGO command fixed to remember place to return to over ⊗XAPPEND command.
 Rare bug in file macros fixed (used to cause ill mem refs).

∂8/23/77 -- Bug in /R/F mode fixed.

∂9/5/77 -- Repeated macros can now be made faster; other minor new features.

 New command ⊗XCHECK enables checking of free storage (currently the default);
   ⊗-⊗XCHECK disables free storage checking; ⊗0⊗XCHECK reports the
   current condition of free storage checking.  Macros which are to be
   executed many times (e.g., 100 or more) will often be executed
   significantly faster if free storage checking has been disabled.  It
   is recommended, however, that free storage checking normally be left
   enabled (except when you are repeatedly executing a macro) because
   internal E errors are detected much faster that way, with less chance
   for clobberage of your file.

 Macro expansion fixed for use of αI not at end of line editor in macro.
 Filehack \GOLD added for GRIPES.OLD[2,2].  \G still gets GRIPES.TXT[2,2].
 ⊗XAPPEND command now gives error message if on dir page or in unformatted file.
 ⊗0⊗XEXACT now reports current condition of case-checking in searches.

∂9/25/77 -- New commands αN, αβN; modified commands αO, αβO; other minor changes.

 E now remembers the PREVIOUS TWO DIFFERENT PAGES that you have been on
 and the PREVIOUS TWO DIFFERENT LINES that you have been at on the current
 incore page(s).  Note: When you move 4 or less lines up or down, E does not
 consider you to have moved enough to warrant saving your old line.  Also,
 the saved locations of the previous two lines are not corrected for line
 insertions and deletions.

   To return to the Previous Page, use αO.
   To return to the Second Previous Page, use either αβO or ⊗2⊗O.

   To return to the Previous Line, use αN.
   To return to the Second Previous Line, use either αβN or ⊗2⊗N.

 The forms ⊗2⊗O and ⊗2⊗N are easier to use than αβO and αβN on NON-DISPLAYS.
 Also, someday E may remember more than two previous places, and the commands
 ⊗#⊗O and ⊗#⊗N will be used to get to the older places.

 The ⊗XBACKGO command is identical with ⊗O (i.e., it distinguishes
 between α and αβ).

Other new features:

 ⊗#αβK now kills # lines at the front of the attach buffer.

 The αβV cmd now erases the whole screen; ⊗V now also redraws page printer.

 CONTINuing (after exiting) now works even if the file has been changed by
 someone else after you exited!

 If E crashes without trying to write the crash file E$SAVE.TXT, the
 REENTER monitor command can be used to make E write the E$SAVE.TXT
 file (which will contain all of the incore text).

 If the file is write-protected from you, a warning is given when opening
 it in READWRITE mode and whenever you cause the "W" flag to be set.

 Any /F switch given on source filename (eg, A←B/F) applies to destination
 file instead.

∂9/29/77 -- ⊗P command from last page no longer causes page to be re-read.

 This command given on the last page still causes the incore page(s)
 to be written out, but it no longer 1) causes multiple pages to be
 lost from core, 2) moves you to the top of the page, nor 3) causes
 the screen to be redisplayed.

∂10/2/77 -- RPG startup of E now accepts device of edit file in AC 12.

 Formerly only files on device DSK: could be edited from RPG startups.
 See page 23.

∂11/17/77 -- Three minor bugs fixed.

 Bug fix to ⊗XEXECUTE of /N file to avoid losing first character of file.
 Bug fix to αβT and ⊗-⊗J commands given from line editor that wrapped around.
 Bug fix to ⊗#αβK command to avoid screwing up internal character count.

∂11/22/77 -- Certain filehacks now imply readonly mode.

The filehacks implying /R mode are:
    \DIGEST   \NOTICE  \DAY  \DOWN  \NAP  \NS  \PLAN  \PLN
Note that the default /R can be overridden by an explicit /-R.

∂12/7/77 -- READ command changed to BOOK.  READ now reads documentation files.

 The monitor command BOOK has replaced READ for reading a book and having
 E remember your place in the book with a .BKP file.

 The monitor command

	 READ <filename>

 searches the system documentation disk areas for the file specified and
 then edits in Readonly mode whatever file was found.  Thus you don't
 need to specify either the extension or the PPN of documentation files.
 If no extension is given, then files with extensions other than UPD
 will be found before UPD files.  However, any explicit extension,
 project, or PPN given will be observed.  If an extension is given but no
 PPN, E will look for the particular file on any of the documentation
 areas.  If a project is given, say PRJ, then E will look for the file
 on [PRJ,DOC].  If a programmer name is given, then no searching of
 documentation areas will be done and normal PPN scanning applies and
 the READ will merely force the file to be edited in Readonly mode.

 The switch /D (for Document) does the same thing as the READ command
 and is useful when giving a filename when switching files.

 Examples:
  READ UUO       ;Edits the UUO Manual file in Readonly mode.
  ⊗εMONCOM/D     ;Switches to the Monitor Command Manual in Readonly mode.
  READ UUO.UPD   ;Edits /R the update file for the UUO Manual.
  READ NOTICE/E  ;Edits /R the NEWS program's text file, starting at the End.

 Other new stuff:

 Verification of the need to reformat a file is suppressed in /F mode.
 The sense of the Yes/No question about keeping an old (invalid)
   directory has been inverted for consistency.  Say "Y" to flush the
   old directory text.
 A file with a "bad" extension (eg, .DMP) will now be edited if no file
   with a good extension exists when you give a file's name without an
   extension.
 The initial default PPN for ⊗XEXECUTE and ⊗XPUTDEFS is your logged in PPN.
 Macros defined during macro expansion are not typed out.  This
   particularly effects macros defined in an EXECUTE file.  A suggestion
   is that you put the command α0αXDEFINE⊗↔ at the end of your EINIT.CMD
   file to have the names of all defined macros typed out.

∂12/11/77 -- EREAD monitor command is like ETV but forces /R mode.

 Also:

 The ⊗XDEFINE command is now legal from line editor.

∂12/20/77 -- Greater-than sign as extension means largest numeric extension.

 For example, ET FOO.> will edit the FOO.* file whose extension is the
 largest numeric value.  E.g., if only FOO.20 and FOO.100 exist, then
 ET FOO.> will edit FOO.100.  If no file is found with a purely
 numeric extension, then ET FOO.> will say File Not Found: FOO.>.

1978

∂04 Jan 78 -- Minor additions and fixes.

 The /R switch in a BOOK command no longer disables the use of a
	.BKP file.  This change makes BOOK <file>/D work as well as
	BOOK <file>/R.
 The BOOK command positions the user on page 2 when starting a new
	book that has an E directory.
 E now correctly remembers your place when you exit from a file
	with multiple pages in core.
 The \FORWARD filehack has been added for editing MAIL's forwarding
	file in /R mode.  User's should not attempt to change that file.

∂19 Feb 78 -- ⊗N,⊗O,⊗H.  File interlocking.  Line numbers.  More.

⊗N,⊗O,⊗H commands for returning to previous lines, pages, or files:

 The commands ⊗N,⊗O,⊗H make use of three corresponding "stacks" of
 places you've been at recently: the LINE STACK (⊗N) of lines currently
 in core, the PAGE STACK (⊗O) of pages NOT currently in core, and the
 FILE STACK (⊗H).  Each of the ⊗N,⊗O,⊗H commands works with the
 corresponding stack; all of these commands interpret arguments in the
 same way and all distinguish between α<cmd> and αβ<cmd>.  You can
 return to the #th previous place, and/or you can "pop" # places off the
 stack, and/or you can "repush" # places back on the stack.  See p. 32
 for the complete explanation of these three commands and NOTE THAT
 αβH IS CHANGED FROM ITS PREVIOUS MEANING.

 Line insertions and deletions (including attachments) are now accounted
 for in the line stack, and the justify commands update both the line
 stack and line marks appropriately.  ⊗XCANCEL preserves the line stack
 but deletes entries in it for lines that no longer exist.  Note that
 ⊗XCANCEL still restores the line marks to their state when you last
 wrote out the page.

 When you return to a previous file (whether by number or by explicit
 filename), the top part of your page stack from that file is restored
 along with all line marks from that file.

 Multiple consecutive FF and VT (and ⊗W) commands do NOT remember (on the
 line stack) intermediate stopping places.  But ANY command besides FF,
 VT, ⊗W, and ⊗0⊗N will cause the current line to get remembered.  While
 you are FF/VTing around a page, the αN command will take you back where
 you started the current string of FF/VT commands (even if you are
 already there!) and will remember, of course, the line you are leaving.

 The directory search commands ⊗F<string>αβP and ⊗F<string>⊗: and the
 extended search command ⊗XFIND no longer spuriously remember the top
 line of the page they leave you on.  The paragraph and message movement
 commands ⊗!<cr> and ⊗∂<cr> no longer spuriously remember the first line
 of the paragraph or message (e.g., if you came from the middle).

 To get the old meaning of arguments to the ⊗H command (page number to
 return to), use the new ⊗XHOME command, which works like the old ⊗H
 command.

File interlocking:

 E now makes sure that someone else hasn't changed your file out from
 under you when you try to (1) CONTINUE after an ENTER failure (e.g.,
 when you try to write out a page while someone else is reading the
 file) or (2) change the protection of the file and fail because of a
 protection violation.  E also opens the file in Read-Alter mode
 before trying to ripple, in order to make sure no one else has the
 file open.  This should prevent all of the screwups that were
 formerly possible when two people simultaneously tried to edit the
 same file.

 There is a new command ⊗XOPEN which opens the current file in Read-
 Alter (RA) mode (⊗XOPEN is not legal in Readonly mode).  You should only
 use this command if you intend to make some change to the current file,
 since such opening of the file in RA mode will update the date/time
 written to the present.  THIS COMMAND IS NEVER NEEDED -- E will still
 open the file in RA mode automatically when you first try to write out a
 page -- but ⊗XOPEN is useful if you intend to make some changes to a
 file and you want to make sure that when you actually do write out a
 page, no one reading the file will cause you to get the ENTER FAILED
 message that leaves you talking to the monitor with only two
 alternatives:  CONTINUE to try again and REENTER to write out the incore
 text in your E$SAVE.TXT file.  Note, however, that the ⊗XOPEN command
 has no failure return -- if it can't open the file, this command itself
 generates the same ENTER FAILED message and the program stops and waits
 for you to type CONTINUE (or REENTER).

New command ⊗XNUMBERS:

 E now lets you select whether or not you want line numbers typed out.
 This mainly affects users on non-displays.  The command ⊗XNUMBERS
 enables typing out line numbers and the command ⊗-⊗XNUMBERS disables
 typing line numbers.  The current initial default is ⊗XNUMBERS.

Miscellaneous other features:

 Macro expansion is stopped (unconditionally) if a macro tries to stuff
   more text into the line editor than E has room for in its buffer.
   Note that E's buffer is considerably bigger than the line editor's,
   so it is still possible to lose some text (without stopping any macro)
   if a macro's line editor text is slightly too long for the line editor.
 When a file needs to be reformatted, E will not consider discarding the old
   directory's text unless that directory ends with a formfeed.
 Whenever the E$SAVE.TXT file is written, E's TMPCOR file is also written.
 The switch /l,pM is a no-op when switching to the ? file or to a file
   that you have already been in (results from restoring line marks for
   that file).
 A few other infrequent bugs have been fixed.

∂03 Mar 78 -- Several minor new bugs/misfeatures fixed (and one old one).

 Bug fixed in typing the name of the file being flushed from the filelist
   when the filelist is full.
 The input buffer is now cleared just before E exits to await the user
   typing CONTINUE to retry an ENTER (or LOOKUP or OPEN).
 Bug fixed to checking file for having changed when CONTINUEing after
   file busy when extending file from last page.
 Bug fixed in ⊗XPROTECTION NNN command to actually change protection
   (was no-op for last two weeks).
 Insert mode on non-display in -XNUMBERS mode gives prompt and starting
   line number but no subsequent line numbers.
 Fix to avoid wasted core (1K) at end of upper segment (old bug).

∂10 Mar 78 -- Tmpcor file now includes top three files in stack, plus page stacks.

 E now remembers in its tmpcor file the top three files of your file
  stack, plus the top part of the page stack of each file.  Thus these
  files will be restored to your file stack when you next give an ETV or
  EREAD monitor command, whether or not that command specifies a file to
  edit.  Line marks are remembered and restored for each of the three
  files remembered.  Remember that you can flush your file stack (should
  it get too cluttered) with the command ⊗0⊗∃, which makes E forget about
  all files but the one you are in.

 To allow specifying page stack entries in switches (e.g., in tmpcor
  files), a new switch has been added: /x,yO pushes the place of page x
  and line y onto the page stack.  This switch cannot, however, be used
  when editing (by explicit name) a file which E already knows about,
  since in that case E will restore the file's previous page stack.

 To allow multiple files to be specified (e.g., in tmpcor files), E has
  been made to accept multiple filenames (and switches), separated by
  commas.  Multiple filenames can be typed whenever E is accepting the
  name of a file to be edited (e.g., in the original monitor command or in
  the ⊗ε or ⊗λ filename line).  The first file listed will be edited and
  the rest will be pushed (in the order given) onto the file stack (this
  means that the second file listed will end up pushed most deeply in the
  stack and the last file listed will end up near the top of the stack.
  Note that if you are switching files (except by ⊗+⊗H or ⊗-⊗H), the file
  you are leaving will end up being pushed onto the stack AFTER the
  additional filenames you give in the filename line.

 Editing a previous file by explicit name (e.g., ETV FOO or ⊗εFOO<cr>) now
  positions you at the page and line where you left that file (unless you
  specify otherwise with switches, or unless that file has had some pages
  added and you haven't actually edited it with the current core image, in
  which case the default position is still the first added page).  Note
  also that line marks and the page stack for that file are restored even
  when switching by explicit name.  Thus switching by explicit name now
  restores everything that switching by any other mechanism restores,
  except for readonly status, which is implied by the ⊗ε or ⊗λ (but which
  can be overriden with /R).

 The new extended command ⊗XTHISPAGE is useful for going from multipage
  mode (two or more pages in core) to single page mode (one page in core).
  This command writes out the incore text and then reads in only the page
  where the arrow is.  The position of the arrow and (when possible) the
  window are preserved.  However, the line stack is currently cleared.

 The extension S1 has been added to E's good extension list, and the
  extensions LDI and RIM have been added to the bad list (file never
  edited unless extension given explicitly or unless only one file exists
  with the given primary name).

 Readonly mode is forced (and announced) on an attempt to edit any
  non-formatted file that is write-protected from you.  Formerly, you got
  the error halt "ENTER FAILED, PROTECTION VIOLATION" upon an attempt to
  edit such a file.

 A bug has been fixed which caused any appropriate /N to be left out of
  the tmpcor file and the header line whenever the filename extension was
  blank.

∂12 Mar 78 -- Improvements in new stuff.
	(See previous message first, if you haven't already read it).

Editing a file that has been extended (e.g., a message file) starts at the
  FIRST NEW PAGE if the file either (1) is named explicitly (with no
  page-specifying switch, e.g., ⊗ε∂<cr>), (2) is the first file edited in
  that core image (e.g., ET ∂<cr> or ET<cr>), or (3) has changed between
  exiting and CONTINUing.  Otherwise, an extended file will be edited
  starting at the page and line where you were when you left that file
  (that is, switching files by explicit number (e.g., ⊗2⊗λ) or with the ⊗H
  command will always return you to the page and line you were previously
  positioned at, even if the file has been extended before or since then).
Whenever the /nP switch is used to start editing at page n, the default
  line (if no line switch is given) is now always line 1.
Filenames read from tmpcor are assumed complete, even though they may
  contain no device name or PPN.
The ⊗XHOME command (old ⊗H cmd) now uses (the top of) the new file stack
  (for going to a relative or absolute page in home file).
The /-R switch now properly disables readonly mode even if ⊗λ was given.
The ⊗XTMPCOR command now forces subsequent exiting and file switching to
  write out the tmpcor file, making it appear you used a standard E
  monitor command (like ETV) to run E (instead of using, e.g., the monitor
  command R E, which normally suppresses writing out of the tmpcor file).

∂14 Mar 78 -- Improved line insert mode (affects display users only):

    IMPORTANT CHANGES to ⊗I, αβ<cr>, αβ↑, αβ↓, αβ. and new αβ<tab>.

It is now possible to get into line insert mode without having a new blank
line added.  To do this, type either αβI from the middle of the line
editor (that is, while editing a line) or ⊗I from the end of the line
editor.  These commands will turn on line insert mode and leave you
positioned wherever you are, but the next <cr> you type will create a new
line.  Note that, having used ⊗I thusly, if you then type <altmode> with
any text in the line, that text will be saved -- the altmode will not
restore any version of that line that existed before you edited it.  If
you don't want the final edited text you have, you can get back the text
as of the ⊗I command by clearing the line editor (e.g., type <clear>) and
then typing <altmode>.  This means that ⊗I from the line editor (not
including αI when interpreted as a line editor command) saves the current
text of the line (in core -- not on the disk) thus preventing you from
getting back (with altmode) a previous version of that line.

There has also been a small constructive change made to the αβ<cr> command
when given from the middle (not end) of the line editor.  This command now
breaks the current line in two, as before, but instead of inserting a
blank line between the two halves and leaving you there in line insert
mode, it merely leaves you at the end of the first part of the line in
line insert mode, without adding a new blank line.  This new effect should
be much more useful than the old version.

Note that these changes make αβI behave differently from αβ<cr> when in
the line editor.  The meanings of these two commands outside the line
editor are unchanged; in that case αβI and αβ<cr> do the same thing,
namely, put you into line insert mode on a new blank line.  Also, whenever
any numeric argument is given to either of these commands, the old meaning
is still in effect -- namely, to insert N blank lines (and not leave you
in line insert mode).

To make line insert mode on old text lines easier to get into, two old
commands and one new one have been made to enter line insert mode if both
α and β are on.  These commands are αβ<tab> and αβ↑ and αβ↓.  The latter
two still go to the end of the line above or below, but now also enter
line insert mode.  The αβ<tab> command is just like α<tab> (goes to the
end of the current line) except that it also enters line insert mode.
Notice again that if you type αβ<tab> while in the line editor, the line
editor text is saved at that point and a subsequent <altmode> has its
usual line-insert-mode meaning.

Another important (and related) new feature is the ability to write out
the page from the line editor with the αβ. command (must have both α and β
in order to work).  This command writes out (to the disk) the text that is
currently in the line editor (as well as the rest of the page) and then
leaves you in the line editor (in line insert mode if you were in it
before).  A subsequent <altmode> typed on that line will not restore the
original text of the line; if you are NOT in line insert mode, it will
restore the text that was written out, and if you ARE in line insert mode,
the <altmode> will have its usual line-insert-mode effect.  Note that
writing out the page from inside the line editor may cause E to Ripple the
file, even though you may not see any X (or W even) on the header line,
since the display is not updated before writing the page out.

Remember that in all cases, if you type <altmode> from a NON-EMPTY line
editor while in line insert mode, the line editor text is retained for
that line and you leave line insert mode.  If you type <altmode> from an
EMPTY line editor in line insert mode, you leave line insert mode with
either the saved text (if any) for that line restored (if you typed ⊗I or
⊗<cr> or αβ. in that line) or the (empty) line deleted.

∂15 Mar 78 -- Bug fixed; window restored on returning to a file.

Bug fixed to properly remember in tmpcor file the values of the /R switch
for all filenames written in tmpcor.

Also, the window position is now preserved and restored upon switching
files and returning.  Currently, the window positions for page stack
entries are not written out in the tmpcor file, except for the last page
and line you were at in the file.

∂17 Mar 78 -- Window position saved/restored with line stack.

E now remembers the window position of each line in the line stack.  When
you return to a line via ⊗N, the old window associated with that line is
restored unless the line was already on the screen, in which case the
window is not changed.

∂01 Apr 78 -- New ⊗XPOINTER cmd, justification simplifications,
    plus ⊗0⊗∃ and ⊗0αβM replaced, new commands to clear stacks, and more.

The new ⊗XPOINTER command is used to switch to a file whose name is
found in the text of the page you are editing, at or below the current
line.  With an argument of zero, the command ⊗0⊗XPOINTER will merely
move to the line containing the filename found (if any) and type out the
filename, but will not switch files.  The command with no argument moves
the arrow to the line containing the filename found (if any) before
attempting to switch files.

A filename in the text will not be recognized unless it is preceded by a
space (or tab) or occurs at the beginning of a line.  Furthermore, to be
accepted by this command, a filename must have at least one of these:
(1) an explicit (non-null) extension, (2) an explicit (complete) PPN,
(3) one or more switches, or (4) a valid filehack.  Spaces are permitted
only as leading spaces in PPNs for blank characters in the project or
programmer name, and a filename with its switches must occur all on one
line.  Thus the following filenames will be recognized:

FILE/-R, FILE.E, FILE[J,G], FILE.EXT[J,G](R9P7L), FILE.[ J, G], \GRIPES.

The following will NOT be accepted: FILE., FILE[X], FILE/6PR, F[ ABC,D].
The only characters permitted in names within the filename are letters
(case of letters is ignored), digits, and the underbar character (which
represents a quoted space).  In particular, the down-arrow construction,
the partial-sign name, and the question-mark name are not permitted in
filenames.  Also note that only the first filename on a line will ever
be detected.

Any switches following a filename in the text will be observed in
switching to that file.  In addition, any text in the extended command
line after the name of the command will be appended to the filename and
switches found in the text.  Thus additional (or overriding) switches
can be specified, or if no PPN or switches appear in the text, an
explicit PPN can be added.  Switches in the text must be perfectly
well-formed or the filename they are applied to will not be recognized.
This means that parentheses must be balanced and no letter or digit can
immediately follow the letter of a slash-type switch.  However, the
actual letters of switches are not checked for validity (as indeed they
never are by E -- undefined switches are completely ignored).

This command's default mode for switching to a file is readonly (/R).
However, this can be overriden with an explicit /-R occurring among the
switches in the text or typed in the command line after the extended
command name (e.g., ⊗XPOINTER /-R<cr>).

When you attempt to switch files with this command, if the file named in
the text cannot be edited because it does not exist, is busy, etc., E will
abort the fileswitching operation automatically (nevertheless having
written out the current page before attempting to switch files).  If,
however, the combined (text and command line) filename with switches has
an illegal syntax, E will say so and then load your line editor (on
displays) with the combined text so that you can correct it and try again.


CLEARING STACKS AND LINE MARKS:

The commands ⊗0⊗∃ and ⊗0αβM no longer clear the file stack and line mark
list.  These commands have been replaced with explicit extended commands.
Also, two new extended commands are provided for clearing the page and
line stacks.  These four new commands are:

    ⊗X ZFILES        ;Zero (clear) the file stack
    ⊗X ZPAGES        ;Zero (clear) the page stack
    ⊗X ZLINES        ;Zero (clear) the line stack
    ⊗X ZMARKS        ;Zero (clear) all line marks


JUSTIFICATION SIMPLIFICATION: REMOVAL OF SWITCHES (MODES)

The justification commands in E no longer accept the various switches
formerly used.  Now a simple procedure is used to determine where
paragraph breaks occur in the input text being justified.  For
justification purposes, a new paragraph is indicated by (1) an empty line
or (2) a line indented exactly the right amount (that is, a line having
the right number of leading blank columns, whether tabs or spaces or both
are used to make the indentation).

The amount of indentation that indicates a paragraph in the input text
will be called the DETECT-PARAGRAPH margin, or simply the DETECT margin.
Note: If you haven't set the detect margin explicitly (see below), and if
the crown margin and the left margin are the same, then only blank lines
will indicate new paragraphs in the input text (otherwise every line would
become a separate paragraph).

The detect margin is normally the same as the crown margin.  However, for
changing the crown margin of justified text that has no blank lines
between paragraphs, the detect margin can be set explicitly to any value.
The detect margin can be set in any justification command by typing its
value immediately after the extended command name and following it with a
slash ("/").  After the slash, the normal margins (crown, left, right,
blank) can be specified, separated by commas.  For instance, the command
⊗XJUST 8/7<cr> would set the detect margin to 8 (for paragraphs indented
with one tab or eight spaces) but would cause the text to be rejustified
so that each paragraph was indented only 7 spaces.  Note that the detect
margin is sticky until you change either the crown margin, the left
margin, or the detect margin itself.  Thus after the above command, E
would no longer recognize the new crown lines (now indented 7 spaces) as
such since the detect margin would still be 8.  The detect margin can be
set without changing any of the other margins, as in ⊗XJUST 7/<cr>.  The
command ⊗XJUST 8<cr> explicitly sets the crown margin to 8 and implicitly
also sets the detect margin to 8.

To find out the current margins and what indicates a paragraph, use an
argument of zero with a justification command, for example ⊗0⊗XJFILL<cr>.

This change affects the extended commands:
	JUST JFILL JGET SJUST SJFILL  TJUST TJFILL TJGET
Note that the last three of these use a separate set of margins (detect,
crown, left, etc.) from the rest.


EXTENSION TO FILEHACKS FOR SPECIFYING A PROGRAMMER NAME:

The filehacks \MAIL, \PLAN, and \NS can now have an explicit programmer
name specified, in which case the mail, plan, or notification file for the
named programmer is read instead of your own.  To specify a programmer
name, follow the filehack name immediately with a colon (:) followed by
the desired programmer name.  For instance, \MAIL:FOO represents FOO's
mail file, and \PLAN:BAZ is BAZ's plan file.  The new ⊗XPOINTER command
will recognize these programmer-name filehacks (as well as the normal
filehacks).  The filehack names themselves can be abbreviated as usual
(e.g., \M:FOO is FOO's mail file).  The programmer-name filehack facility
is designed for non-display users, since display users could already enter
a filename like ∂FOO or ∂BAZ.PLN.


MAILING FROM E WHEN THERE ARE NO JOB SLOTS:

When there are no job slots for E to start up a MAIL job, mail sent from E
is now queued (by writing it into a special file on RMD,SYS which will get
processed later automatically).  You are told when this is happening, and
you will eventually be notified of the success or failure of the mail
delivery.

Also, whenever the MAIL program detects an error in mail coming from E, it
will now mail the whole message and command back to the sender with an
appropriate message prefixed to it.


BUG FIXES:

Bug fix to ⊗XJOIN given on an empty line.
Bug fix for αβV typed from line editor.
⊗XREDFINE and ⊗XDEFINE called from inside a macro and ⊗XEXECUTE called at
  any time no longer change the current default macro called by the ⊗Y
  command.

∂06 Apr 78 -- ⊗-⊗XNUMBERS made default (no line numbers typed out).

Users who want line numbers typed out with the text must now enable them
by giving the ⊗XNUMBERS command, since the default is now to omit the
line numbers (by popular demand).

Also, the ⊗L command (move to specific line) is now permitted from the
line editor.  Note that to get this command to E, however, you must
either (1) type αβL rather than αL, which is a line editor command, or
(2) precede the ⊗L with a (signed or unsigned) argument.  And to enter
an unsigned argument from the line editor, the first digit must be typed
with both α and β (since α<digit> is taken as a line editor argument and
doesn't get to E).

∂09 Apr 78 -- Minor improvements to ⊗XPOINTER command.

The ⊗XPOINTER command no longer recognizes filenames in the text that are
less than four characters long (including their switches), except for
filehacks, which can be any length.  Thus "A.I" and "F/X" will not be taken
as filenames.

Also, a numeric argument can be given to the ⊗XPOINTER command to have it
find the nth filename in the text; thus it is now possible to switch to
any of several files all named on a given line.  An arg of the form ⊗#
will make E merely type out the #th filename, without moving the arrow and
without switching files.  An arg of the form ⊗+⊗# means switch to the #th
file named in the text; this is conveniently done right after the ⊗# form
has verified that the filename found was the one you wanted to switch to.
Since ⊗# doesn't normally move the arrow (so that you can then say ⊗+⊗#
without having changed the significance of the number), an arg of the form
⊗-⊗# finds the #th filename and moves the arrow to that line but doesn't
switch files.

Summary of meanings of ⊗XPOINTER args:

  arg	meaning

 (none)	Switch to first file named in the text at or below current line.
   ⊗0	Type out the first filename in the text, and move to its line.
  ⊗-⊗#	Type out the #th filename in the text, and move to its line.
   ⊗#	Type out the #th filename in the text (without moving).
  ⊗+⊗#	Switch to the #th file named in the text.

∂21 Apr 78 -- Minor fixes and new commands for getting info on non-displays.

 ETV<cr> edits the previous file at same place as before, even if the
   file has been extended.  ETV <filename><cr> will still position you
   at the first new page if the file has been extended.
 CETV command sets up the file stack from the tmpcor file.
 CETV<cr> is exactly like ETV<cr>; that is, it does NOT create a file,
   but edits the previously edited file.
 The ⊗XTRAILER and ⊗XHEADER commands type out the header and trailer lines,
   respectively.  These are useful on non-displays for getting some of the
   information that is not otherwise obtainable.
 The CRLF is suppressed on non-displays after ⊗∂ or ⊗! cmd and after OK.

∂25 Apr 78 -- Null filename during switching represents the file you just left.

 It is now possible to switch to the current file (for purposes of
   specifying different switch settings, like /∞F for burping the whole
   file) without having to type the actual filename.  If you omit the
   filename requested by the ⊗ε or ⊗λ command, but you do include one or
   more switches, then the file assumed will be the one you just left
   (upon the ⊗ε or ⊗λ cmd).  Thus the command ⊗ε/∞F<cr> will burp your
   whole file and ⊗ε/Q<cr> will format a /N file with an E directory.

 Also, the ⊗XPOINTER command will now recognize filenames that are preceded
   by a double quote (").  This allows REQUIREd filenames in SAIL and PUB
   to be spotted by this command (eg., REQUIRE "FOO.SAI" SOURCE_FILE).

∂15 May 78 -- αβ↑ and αβ↓ and line insert mode on blank lines.

 The commands αβ↑ and αβ↓ now put you into line insert mode even if
 the line you are taken to by the command is empty.  Formerly, when
 arriving at an empty line, these commands would NOT put you into the
 line editor at all, and therefore not put you into line insert mode.
 The commands α↑ α↓ ⊗; ⊗: still do not put you into the line editor
 if the line is empty.

∂23 May 78 -- Bug fixes to justification and TIN/SIN commands.

 Two bugs have been fixed in the justification and TIN/SIN commands.
   One bug affected positioning of the arrow after justification on the
   second (or later) of multiple incore pages; this bug also sometimes
   caused a fatal error to occur later, when the page was being written
   out.  The other bug was in attempts to TIN or SIN a null range
   resulting from the arrow being on the row of stars at the end of the
   incore text.  These were both old bugs.

 Also, ⊗XBEEPME is now legal from the line editor.

∂27 May 78 -- More bug fixes to justification.

 More justification bugs fixed for multipage mode.
 Flushed BEEPing of TTY32 on errors!!!

∂29 May 78 -- New switch /X for bloating a file, plus misc. other stuff.

 The new switch /#X causes E to reformat the file and bloat each page
  (except the directory) by # records of nulls (after discarding previous
  records of nulls (except on the directory page)).  This switch also
  disables auto burping.  Thus this switch is useful when you are about
  to perform a large amount of editing which might have otherwise caused
  rippling several times.  If the number # is omitted (i.e., "/X"), then
  the default bloat amount is used, which is currently 3 (records).  The
  bloat amount is limited to prevent the resulting file from becoming
  bigger than 256K; however, since this switch can still make a file very
  big, care should be taken to avoid wasting disk space unnecessarily.
  Note that you can unbloat (i.e., burp) a file with /∞F.

 New switch /#A sets auto burp threshold to #.  /-A disables auto burping.
  The effect of this switch is global; i.e., it applies to all files edited.
 TMPCOR file includes /-A (global for all files) if auto burping is disabled.
 The user is now beeped when the line editor fills up and activates.
 ⊗-⊗0<ff> is now just like ⊗0<vt>, and ⊗-⊗0<vt> is same as ⊗0<ff>.
 With an even screen size, the cmds ⊗0<ff>, ⊗0<vt> and ⊗0⊗W position the
  arrow just below the center, like ⊗0⊗∨ has always done.

∂31 May 78 -- Bug fixes to justification commands.

 Fixes to ⊗XTJUST and ⊗XTJFILL commands to make them work again.
 Fix to ⊗XJGET and ⊗XTJGET to do nothing if no text to examine and to
  use previous text if arg is negative.
 Bloating by /X is suppressed on the last page of a file and is limited
  to avoid making the file more than twice its previous size.

∂4 Jun 78 -- *** αβ! and αβ∂ will soon be different from α! and α∂ ***

*** COMING SOON TO AN E NEAR YOU: ***

Soon, the αβ versions of the ! and ∂ commands will have a slightly
 changed meaning.  The α versions of these commands will be unchanged,
 so users should NOW get used to using α! and α∂ for the old meanings.
 The new αβ versions, which are NOT UP YET, will pretend that the
 current line IS THE FIRST LINE OF A PARAGRAPH OR MESSAGE (depending on
 whether you used the ! or ∂ command).  This will be particularly useful
 when you want to justify, attach, type out, etc., the REST of the
 current paragraph or message.  It will also be useful for justifying,
 attaching, etc., the previous part of the paragraph or message.

Also, another justification bug has been fixed.

∂18 Jun 78 -- Header line displays "/-A" while autoburping is disabled.

∂22 Jun 78 -- New undeleting and Lisp-indenting and MODIFIED αβ! αβ∂ commands.

NEW COMMANDS FOR LISP USERS
 The α/ and αβ/ commands now parse Lisp S-expressions and indent lines
 accordingly (with tabs and spaces as needed).  Text is never moved from
 one line to another; only the indentation of each line is subject to
 change.  The ⊗#α/ command indents # lines (default is 1) starting at the
 current line.  Except in attach mode (see below), the ⊗#αβ/ does the same
 thing as ⊗#α/ but first moves down a line (keeping you in line insert mode
 if you are already in it).  Both α/ and αβ/ without an arg indent one line
 and leave you in the line editor positioned just after the indentation
 (αβ/ moves down a line first, of course).  When an explicit arg is given,
 neither command leaves you in the line editor.  All forms of ⊗/ can be
 given from within the line editor.  The indentation set up is determined
 by examining the S-expression which starts at or just before the current
 line, where the beginning of that S-expression is defined by the nearest
 left parenthesis occurring in the first column of a line (or by the
 beginning of the current page if no initial left parenthesis is found).
 In attach mode, the α/ command does not look for any context before the
 first line of the attach buffer, but the αβ/ command looks back into the
 normal page text just ahead of the attach buffer to allow you to indent
 the attach buffer while positioned at the proper place on the page.  A
 negative argument to either command means to indent the given number of
 lines before the current line (with or without moving down a line first,
 depending on whether the command has αβ or just α); in attach mode a
 negative argument makes the command a no-op.  The parsing of S-expressions
 is by MacLisp character set interpretation, but a command probably to be
 added soon will allow different character interpretations.  For more
 details, see GLS.

UNDELETING LINES
 Deleted lines are now saved (up to a certain limit) in the delete stack
 and can be undeleted with the ⊗XUNDELETE command.  Undeleted lines are
 inserted at the beginning of the attach buffer (even if no lines were
 previous attached).  The limit of deleted lines saved is indicated by a
 (settable) maximum number of deleted characters; this limit is initially
 5000 characters (approximately 1K of core).  However, this limit is
 allowed to be surpassed by a single command that itself deletes more than
 the current limit of deleted characters.  Thus the text deleting of any
 command (except ⊗XCANCEL, which doesn't save in the delete stack the text
 being cancelled) can be undone immediately, provided that no other
 command that deletes lines is executed first.  And, of course, even if
 another deleting command is executed, the earlier deleted lines can still
 be undeleted if the maximum character count for deleted lines is not
 exceeded.  Lines are undeleted in the opposite order from their deletion;
 that is, deleted lines go into a stack.  When the maximum deleted
 character count is caused to be exceeded by a newly deleted line, the
 oldest deleted lines (on the bottom of the stack) are flushed (forever)
 until the character count is brought back within the limit, but lines
 deleted by the current command are never flushed until another command
 deletes some lines.  When a line has been undeleted, it is no longer on
 the delete stack and can't be undeleted again (unless it is re-deleted).
 Now for what the various forms of the command do:

	⊗XUNDELETE      Undeletes (into the attach buffer) the last group
			of lines that was deleted by a single command,
			unless those lines have already been undeleted, in
			which case this command (with no argument) won't
			do anything (but complain).
	⊗#⊗XUNDELETE	Undeletes # lines (into the attach buffer).
	⊗0⊗XUNDELETE    Tells how many lines and characters can currently
			be undeleted, and it will also tell what the
			current deleted character limit is.
	⊗-⊗#⊗XUNDELETE  Sets the deleted character limit to # characters
			(note the negative argument).

MODIFIED αβ! AND αβ∂ COMMANDS!
 The αβ versions of the ! and ∂ commands now have a slightly changed
 meaning.  (The α versions of these commands are unchanged, so users
 should now always use α! and α∂ for the old meanings.)  The new αβ
 versions pretend that the current line IS THE FIRST LINE OF A PARAGRAPH
 OR MESSAGE (depending on whether you used the ! or ∂ command).  This is
 particularly useful when you want to justify, attach, type out, etc., the
 REST of the current paragraph or message.  Thus, with αβ the part of the
 current paragraph or message before the current line is considered to be
 in a different paragraph or message.  The ⊗-αβ! and ⊗-αβ∂ commands (note
 the negative argument) are useful for justifying, attaching, etc., the
 PREVIOUS part of the current paragraph or message.

MISCELLANEOUS

 The ⊗F<string>⊗P and ⊗F<string>⊗: commands point out by saying "(incore
 page)" when the resultant page turns out already to have been in core.
 This lets you know whether to use αN or αO to get back where you came
 from.

 The ⊗XCORCHK command has been added to make E try to core down if
 possible.  There may be certain situations where E doesn't automatically
 core down as much as possible immediately, but this command will force it
 to core down if appropriate.  Users NEVER REALLY NEED to use this command.

 A bug has been fixed that made file formatting rejected on a file switching
 command following a file formatting command of the form FILE1→FILE2.

 Another bug has been fixed that caused a duplication of the home file in
 the file stack when the αβ? command was aborted because the file was busy.

∂23 Jun 78 -- Bug involving blank lines fixed in ⊗/ commands.

 Also, the current line is not checked for the beginning of an S-expression
 (normally indicated by a left parenthesis in column 1) when an ⊗/ command
 is given without an argument (indents current line as appropriate to
 previously started S-expression, and leaves you in the line editor beyond
 the indentation).

 Also, a minor DM display bug has been fixed that occasionally caused the
 row of stars to be duplicated on the screen.

∂30 Jun 78 -- Minor fix plus new feature in ⊗/ command.  ⊗XLISPSYNTAX cmd.

 Bug fixed in ⊗/ with respect to vertical bars.

 The ⊗/ command now recognizes "super-brackets".  This makes ] in the text
 equivalent to enough )'s to close back to the matching [, or to close all
 hanging ('s if no hanging [ is present to match.

 The ⊗XTV command has been flushed since the TV editor is no longer available.

 The information typed by ⊗0⊗XINDENT and ⊗0⊗XALIGN is now more descriptive.

NEW COMMAND: ⊗XLISPSYNTAX

A new command ⊗XLISPSYNTAX has been implemented for examining and
modifying the syntax table which drives the ⊗/ (LISP indentation)
command.  This table has one entry for each of the 128. (200 octal)
characters.  Each entry consists of one or two characters which
describe a LISP character syntax category.  The second (or only)
character is a mnemonic for the role played in the syntax of LISP
S-expressions.  The first character of two is an auxiliary character
used for certain kinds of matching, e.g. of string quotes or super-
brackets.  The syntax types are:

  TYPE	NAME		AUX?	CHARACTERS WHICH INITIALLY HAVE THAT SYNTAX
   (	left paren	no	(
   )    right paren	no	)
   [    left super	no	[
   ]    right super	yes	]
   /    char quoter	no	/ %
   '    quote macro	no	` ' ,
   |    string quoter	yes	| "
   ↔    carriage return	no	CR
   ;    semicolon	yes	;
    	space		no	NULL TAB LF VT FORM SPACE BS
   A    letter		no	all others (e.g. A-Z a-z 0-9 + - * @ # α β ε ...)

(This initial arrangement represents a compromise between MacLISP and
InterLISP syntax.  In MacLISP, there are no superbrackets, and only /
(and not %) is a character quoter.  In InterLISP, only % (and not /)
is a character quoter; | does not serve as a string-like atom delimiter;
and semicolon is not a comment character.)

The auxiliary character is used for only a few special cases.
For a right superbracket, it is the character which is the matching
left superbracket.  (Thus one can have several independent pairs
of superbrackets, in principle.  This may not square with InterLISP
superbracket semantics, however.)  For a comment character, it is
the character which terminates the comment.  For a string quoter
it is the character which terminates the string (normally the same
one which begins it, but this extra flexibility is provided anyway).

The syntax table can be modified using the command:

	⊗XLISPSYNTAX<space><octal of char to be affected><space>
		<optional auxiliary char in octal, followed by space>
		<representative mnemonic syntax char><CR>

Examples: to make < and > be parentheses, one would do:
	⊗XLISPSYNTAX 74 (
	⊗XLISPSYNTAX 76 )
To make % not be a character quoter, but only a letter:
	⊗XLISPSYNTAX 45 A
To make ⊂ and ⊃ be superbrackets, one would say:
	⊗XLISPSYNTAX 20 [
	⊗XLISPSYNTAX 21 20 ]
The extra "20 " in the second one is needed to specify that ⊃ is
matched by ⊂.  However, the first command is also needed explicitly
to define ⊂ as a left superbracket.

The command
	⊗-⊗XLISPSYNTAX<CR>
resets all the interpretations to their initial default.

Finally, the command
	⊗XLISPSYNTAX<space><octal of char><CR>
will merely cause E to type out the current interpretation of the char
given in octal.

In Terse mode (see ⊗XTERSE command), the typeout resulting from the
⊗XLISPSYNTAX command is suppressed except in the last case shown (which
is an explicit request for this typeout).

∂7 Jul 78 -- Two bugs fixed in ⊗/ cmd.

 Bug fix to ⊗/ to adjust internal tabs correctly.
 Bug fix to ⊗/ to avoid infinite loop resulting from superbrackets.

 Also, autoburping suppressed if file is about to be deleted (eg, from ⊗∂αβD).

∂14 Jul 78 -- ⊗XSILENT command suppresses error messages inside macros; more.

 The ⊗XSILENT command suppresses error messages that are generated inside
 macros except when such an error would stop all macros.  Thus SILENT mode
 can be used to speed up execution (by suppressing the error typeout) in
 macros that deliberately cause errors to happen in order to abort one
 level of macro execution (in ⊗XSTOPONE mode).  The command ⊗-⊗XSILENT
 disables this mode.  The commands ⊗0⊗XSILENT, ⊗0⊗XVERBOSE, and ⊗0⊗XTERSE
 all type out the status of SILENT mode (when enabled) in addition to the
 status of the TERSE/NORMAL/VERBOSE mode.

 Answering the queston "Discard text of old directory?" no longer implies
 that you are willing to have the file reformatted.  If the file needs
 reformatting, then you will be asked about it separately.

 Filestatus is now displayed during all file copying (including formatting).

∂17 Jul 78 -- Accidentally required /N confirmation fixed.

∂18 Jul 78 -- Misc. minor improvements.

 The ⊗0αH command types stack level of each file listed; use a file's
   given number in the ⊗#αH command to get to that file.
 ⊗XTELLME and ⊗XTMPCOR are now permitted from line editor.
 ⊗∞ repeat arg no longer disallowed in null substitution specification.

∂24 Jul 78 -- Improved non-display line/page number typeout.

 When a pagemark (incore or not) gets deleted on a non-display, E now
 always types out the new page number, line number and line count for
 the new page.  Also, end-of-page lines include the line number to
 let you know how big the page is.

 Also, the extension .FAS (MacLisp binary file) has been added to E's list
 of bad extensions to avoid when no extension is typed by the user.  And
 the extension .LSP (Lisp) now has higher priority in the good extension
 list than it used to have.

 Finally, ⊗-⊗XCHECK and ⊗XCHECK (disabling and enabling of Free Storage
 checking) don't type out anything in Terse mode.  (⊗0⊗XCHECK still always
 tells you the status of Free Storage checking.)

∂12 Aug 78 -- Fixes to ⊗XSJFILL and ⊗XSJUST commands, plus more.

 ⊗XSJFILL and ⊗XSJUST commands fixed to indent paragraphs and insert blank
   lines properly.
 The extension .TEX has been added to E's list of good extensions to look for.
 CR, LF or ALT seen as switch char (eg, ⊗εFOO/<cr>) causes illegal file spec.
 Main spooling errors (no jobs for spooler) still cause file to be spooled.

∂14 Aug 78 -- \BBOARD filehack added.

∂18 Aug 78 -- ⊗#⊗XAUTOWRITE command added to save page after # insertions.

 E can now be made to automatically write out the incore text after a
 given number of lines have been inserted in line insert mode.  The
 default is NEVER to write out the text automatically, but the command
 ⊗#⊗XAUTOWRITE will set to # (if positive) the number of inserted lines
 after which E will automatically write out the page.  The autowriting
 will occur only upon a CR given in line insert mode, and then only every
 # lines; when autowriting occurs, a message to that effect is typed out
 and you are then left still in line insert mode.  Only lines created with
 line insert mode are included in the autowrite line counter, and the
 counter is reset to zero whenever the page is written out (by any means)
 and whenever you switch pages or ⊗XCANCEL.  The command ⊗-⊗XAUTOWRITE
 will disable autowriting (the default state), and the command ⊗XAUTOWRITE
 (without any arg, or with a zero arg) will report the current status and
 (if enabled) the threshold of the autowriter.

∂22 Aug 78 -- Commands to alter E's use of the display screen.

 The commands ⊗XTOPSET, ⊗XBOTSET, ⊗XATTSET and ⊗XHEIGHT can be used to
 alter E's use of the display screen.  These commands set, respectively,
 (1) the number of lines skipped above E's display (TOPSET), (2) the
 number of lines in the page printer at the bottom (BOTSET), (3) the
 maximum number of lines used to display the attach buffer (ATTSET), and
 (4) the number of lines used to display incore text (HEIGHT).  For the
 complete details, see p. 33 of this file.

 Also, the command ⊗0⊗M now reports how many line marks there are in the file.

Two minor display bugs have been fixed recently:

 One display bug formerly sometimes caused a just-edited line to appear
 twice, with one copy appearing where some other text should have.

 The other display bug sometimes caused the trailer line to appear in the
 page printer area at the bottom of the screen.

∂27 Aug 78 -- ⊗XBREAK and ⊗XJOIN fixed to preserve marks and line stack.

 Also, ⊗XBREAK and ⊗XJOIN now accept negative args to work on the
 given number of lines preceding the current line.

∂31 Aug 78 -- Minor fix to ⊗XBOTSET.

 Bug fixed in ⊗XBOTSET to avoid forgetting previous wholine already
 turned off by ⊗XTOPSET.

∂4 Sept 78 -- ⊗Xα<cr> to edit prev cmd; /-U switch to avoid updating file dir.

 ⊗Xα<cr> loads the line editor with the last ⊗X command line typed, to let
 you edit it and try again.  The α and β bits that you get on the edited
 command are precisely what you type on the X in ⊗Xα<cr>; also any numeric
 arg typed to the ⊗Xα<cr> is applied to the edited command.  This feature
 does not work on non-displays nor inside macros.

 E also now knows about the AAO privilege that is granted by the ACCESS
 program, so that E can continue to warn you about files that are write
 protected from you.


 E now has a /-U switch (and a ⊗-⊗XUPDATE command) that suppresses
 updating the directory whenever possible.  In particular, this switch is
 the DEFAULT when you are editing SOMEONE ELSE'S MESSAGE FILE (on 2,2 --
 this default does NOT apply to MSG.MSG files, but an explicit /-U will
 work on such files).  Thus if you go edit a message that you sent
 someone, your edit will not screw up his "place" in the file because E
 will retain the non-updated directory for him.

 The maintaining of the owner's "place" (last previously existing page) in
 the file works under virtually all conditions of editing a file in /-U
 mode, even if it ripples or if you burp it -- however, autoburping is
 never done while in /-U mode.  Although the /-U switch is not displayed
 to the user, its presence will be noted (on displays) when you write out
 a page -- the "U" flag on the header line will appear (or not disappear
 if it was already there) if the incore version of the directory didn't
 get completely written on the disk.

 One particular effect of /-U mode is that changing the first line of a
 page will not force the directory to be written out (although it will
 still cause the "D" to appear in the header, and when the page is written
 out a "U" will appear in place of the "D"); thus the directory can become
 inconsistent with the TEXT of the first line of each page (and if you
 leave such a file without doing an ⊗XUPDATE and come back to that file
 later, E won't know that the directory does not reflect the actual first
 line of each page).  However, the record numbers on the directory page
 are NOT allowed to become invalid or inconsistent.  As usual, the
 ⊗XUPDATE command will write out the directory (if necessary to update the
 disk version), and in addition, this command will take you out of /-U
 mode.

 The default /-U mode that occurs when editing another person's message
 file cannot be overriden with the /U switch; you must actually give the
 ⊗XUPDATE command to leave /-U mode, but YOU SHOULDN'T DO ⊗XUPDATE WHILE
 IN SOMEONE ELSE'S FILE.  (The /U switch has no use except to override an
 earlier /-U switch in the same command line!)

∂12 Sept 78 -- Two minor glitches fixed.

 ⊗XBOTSET has been fixed to avoid spurious erase of part of screen.

 Swapping to another program from E restores the wholine, if was turned off
 because of ⊗0⊗XTOPSET (or ⊗1⊗XTOPSET).

∂20 Sept 78 -- Integer-valued numeric macros with numeric operations and tests.

First some minor fixes:

 ⊗XNDFAIL ignores down-arrows in labels, lists symbols defined by ← or =,
   and doesn't allow spaces or tabs in the middle of a symbol.
 ⊗XUPDATE now never writes out directory unless necessary to update the
   disk version.  And if the incore text has been changed, ⊗XUPDATE writes
   it out when writing out the directory; this is necessary for consistency
   since writing out the directory may require rippling, which HAS to write
   out the current page.  Also, ⊗0⊗XUPDATE now simply reports the status
   of directory updating (/U or /-U mode).
 Bug fix to make ⊗O remember correct old pages after page deletion or insertion.
 "OK" always suppressed during macro execution.

And now for...

INTEGER-VALUED NUMERIC MACROS

 There are now numeric macros, whose integer values are represented by
 strings of digits (optionally preceded by + or - and optionally followed
 by non-digits).  There are several new commands to create, operate on,
 test, and apply numeric macros.  Numeric macros can be "executed" just
 like any other macros; the result is the typing of the simple string of
 digits into the text.  The CONTROL and META bits are ignored when
 evaluating a numeric macro and are left OFF when E generates a numeric
 macro.

 When a macro is being evaluated for its numeric value, an error will
 result if the macro definition doesn't start with a string of digits
 (optionally preceded by + or -); the evaluation is terminated by any
 non-digit (not including a leading + or -).  The maximum absolute value
 that can be generated without error during evaluation of a numeric macro
 is 2↑35 - 1.  Larger numeric values will give undefined results.  The
 largest possible absolute value of the repeat argument for any command is
 2↑17 - 8; larger repeat arguments will be limited to this maximum
 absolute value (with proper sign preserved).

 The only difference between numeric and non-numeric macros is that
 evaluating (as opposed to executing) a non-numeric macro will result in
 an error.

   ⊗XSET <macro>        Sets the named macro to the string of decimal
			digits (possibly preceded by + or -) that
			represents the command's numeric repeat argument.
			This command accepts a search distance as the
			repeat argument.
   ⊗XARGUMENT <macro>   Sets up a repeat argument for the following
			command from the named numeric macro.  Any arg
			given to the ⊗XARGUMENT command itself is added to
			the value from the macro before setting the
			resultant argument.  If the macro's definition
			starts with "+", the resultant argument will be
			relative, as if ⊗+ were typed.  The largest
			possible absolute value of the repeat argument is
			2↑17 - 8; larger repeat arguments will be limited
			to this maximum absolute value (with proper sign
			preserved).

 Of course, all the old commands that work on macros work just as well on
 numeric macros, but the following old commands deserve particular mention
 here since they are important in conjunction with the new commands for
 numeric macros.

   ⊗0⊗Z <macro>		Types macro's definition.
   ⊗Z <macro>		Executes the macro.
   ⊗-⊗XDEFINE <macro>	Undefines the macro.

 The following commands operate on the numeric value of a given macro.
 If the macro's old value started with "+", then the new value will start
 with "+" unless the new value is negative.  CONTROL and META bits are
 ignored in the macro's old value and are left OFF in the new value.  As
 usual, if no repeat argument is given, ⊗1 is assumed; thus ⊗XADD TOTAL<cr>
 adds 1 to TOTAL.  In the ⊗XDIVIDE and ⊗XREMAINDER commands, the remainder
 has the same sign as the dividend and the quotient is not rounded.

   ⊗XMULTIPLY <macro>	Multiply macro's numeric value by given repeat arg.
   ⊗XDIVIDE <macro>	Divide macro's numeric value by given repeat arg.
   ⊗XREMAINDER <macro>	Make macro's new value be the remainder from the old
			value divided by the given repeat arg.
   ⊗XADD <macro>	Add given repeat arg to the macro's value.
   ⊗XSUBTRACT <macro>	Subtract given repeat arg from the macro's value.
   ⊗XMAXIMUM <macro>	Set macro's value to MAX(<old value>,<repeat arg>).
   ⊗XMINIMUM <macro>	Set macro's value to MIN(<old value>,<repeat arg>).

 Each of the following "IF" commands compares the command's repeat
 argument against the value of a given numeric macro.  If the test proves
 true, nothing happens, but if the test fails, then an error will result
 (which can be used to terminate macro expansion).  As usual, if the
 repeat argument is omitted, ⊗1 is assumed.

   ⊗XIFLT <macro>	Error unless repeat arg < macro value
   ⊗XIFLE <macro>	Error unless repeat arg ≤ macro value
   ⊗XIFGE <macro>	Error unless repeat arg ≥ macro value
   ⊗XIFGT <macro>	Error unless repeat arg > macro value
   ⊗XIFEQ <macro>	Error unless repeat arg = macro value
   ⊗XIFNE <macro>	Error unless repeat arg ≠ macro value

∂22 Sept 78 -- αβS cmd re-edits last line.  Readonly internal E variables.

The new αβS command returns you to the last line you edited, if it is
still on the incore page at the place where you edited it.  This command
positions you at the column where you were when you left that line and can
be given from the line editor to take you back to a previously edited
line; thus it can be used to alternate between line editing of two
different incore lines.  Note also that this command is useful if you left
the line editor accidentally.  However, if you left the line editor with
<cr> or α<cr>, then this command will position you at the end of that
line, since it appears to E that that is where you typed the <cr> (the
system places such a <cr> at the end of the line).  Also, line edits that
you flushed with <altmode> cannot be gotten back into with αβS; only line
edits whose final text is accepted by E can be re-entered this way.  Any
altering (such as by substitution or justification) of the last line
edited prevents this command from getting back into that line.  The
position of the last line edited is updated for all line insertions and
deletions, but if you have since attached the last line edited, then this
command will succeed only if you have put that line back where it came
from (e.g., with αβR).  If you have deleted the last line edited, then you
cannot get into it with this command even if you have undeleted it and
placed it back where it came from.  On non-displays, this command goes
back to the last line typed in (inserted) but of course doesn't edit it.


READONLY INTERNAL E VARIABLES

There are now certain always-defined readonly variables whose values can
be accessed with most of the numeric macro handling commands.  These
variables include the current page number, the current line number, the
current column position, etc.  The complete list of variables is given
below (more can be added if necessary).

Here are the commands that accept either a readonly variable name or a
macro name.  See the individual command descriptions for what these
commands do with the value of the variable or macro.  Commands in the
second and third columns below (like ⊗XMULTIPLY) normally set (in addition
to using) a numeric macro value; when given a readonly variable name those
command merely type out the resultant value.

   ⊗XARGUMENT	   ⊗XMULTIPLY	   ⊗XADD	   ⊗XIFLT
   ⊗0⊗Z		   ⊗XDIVIDE	   ⊗XSUBTRACT	   ⊗XIFLE
		   ⊗XREMAINDER	   ⊗XMAXIMUM	   ⊗XIFGE
				   ⊗XMINIMUM	   ⊗XIFGT
						   ⊗XIFEQ
						   ⊗XIFNE

Here are the current readonly variables.  The names of readonly variables
CANNOT be abbreviated; and they all end with dot (.) to distinguish them
from macro names (which can occur wherever readonly variable names can).
For the purpose of these variables, the current character is the first
character on a line unless the command (from the above list) was given
from the line editor, in which case the current character is the one the
cursor was under when the command was given.  The variables below that are
marked with an asterisk (*) do not take into account any changes so far in
the current line if the variable is being evaluated from the line editor;
thus these variables return the value that would result if <altmode> were
typed immediately (this effect may or may not be changed).  The remaining
variables return the current accurate value even when given from the line
editor.

  READONLY
  VARIABLE   VALUE
  --------   ------
   LINE.     Number of the current line within the current page.
 * LINES.    Number of lines on the current page.
   PAGE.     Number of the current page.
   PAGES.    Number of pages in the file.
   COL.      Number of the current column, where 0 is the left margin.
   COLS.     Number of columns taken up by the current line.
   CHAR.     Number of the current character within the current line, where
	     0 is the first character in a line.  There is a difference
	     between CHAR. and COL. if and only if there are tabs ahead of
	     the cursor in the current line.
   CHARS.    Number of characters in the current line, not counting the
	     CRLF at the end of the line.  This value will be 0 if the
	     current line is empty and -2 if the current "line" is the end
	     of a page.
   CORLIN.   Number of the current line among all incore text.
 * CORLNS.   Number of lines of incore text (including incore pagemarks).
 * CORCHS.   Number of characters of space taken up by the incore text, not
	     counting nulls at the end of the final incore page.
 * ROOM.     Number of additional characters there is room for among the
	     incore text before expanding ("X") the page(s) is needed.  The
	     sum of CORCHS. and ROOM. is the amount of disk space, in
	     characters, currently allocated to the incore text.
   CORBEG.   Number of the first incore page.
   COREND.   Number of the last incore page.
   ASCII.    Ascii character code for the current character.  This will be
	     13 (decimal code for <cr>) if the current line is empty or if
	     the cursor is positioned at the end of the line.  This value
	     will be 12 (decimal code for <ff>) if the current "line" is
	     the end of a page.
   SIXBIT.   Sixbit character code for the current character.  This is made
	     from the ascii value by subtracting 64 (decimal) from ascii
	     character codes from 96 to 127 (decimal, inclusive) or 32
	     (decimal) from ascii character codes from 0 to 95 (decimal,
	     inclusive).  Thus, the characters with ascii codes 0 through
	     31 (decimal) have negative sixbit codes.
   TOPSIZ.   Number of screen lines not used at top of screen (normally 2,
	     to allow for wholine).
   BOTSIZ.   Number of screen lines used at bottom of screen for typeout
	     and echoing (in the page printer).
   WINSIZ.   Number of screen lines used to display text (does not include
	     lines used for the header and trailer).
   ATTSIZ.   Number of lines currently attached.
   ATTMAX.   Maximum number of attached lines that will be displayed.

∂26 Sept 78 -- ⊗-⊗XECHO turns off echoing of text from line editor.

⊗-⊗XECHO turns off the echoing of text edited in the line editor (displays
only).  In this mode, however, the activator of such edited text is typed
out so that you can tell what it is (although this typeout will occur late
since it is done by E, not the system).  The command ⊗XECHO restores the
normal mode in which all input is echoed (except for that generated during
macro expansion).  ⊗0⊗XECHO reports the state of echoing.

Bug fix to ⊗XARGUMENT when getting readonly values from line editor.

∂27 Sept 78 -- New ⊗XCASE command calls Nth macro named in command line.

The following command can be used to select and call one macro from a
list.  In this case the repeat argument to the command determines which of
several possible macros is to be called.  This command is normally used
inside a macro that might want to call some other macro(s).

	⊗#⊗XCASE <macro name> <macro name> ... <macro name><cr>

This command executes the #th macro in the list of macro names, where the
counting of # starts at zero (0); the selected macro is executed with a
repeat arg of 1.  For instance, ⊗2⊗XCASE A B C D<cr> will execute macro C.
The macro names should be separated with spaces.  No macro name in the
middle can be omitted, and the null (blank) macro name cannot be used
here; however, any non-blank names can be supplied, since E does not check
that all such names represent currently defined macros.  If the repeat arg
given to ⊗XCASE is negative, then the command will be aborted.  Since the
extended command line is buffered in E, and since the buffer has a fixed
size, there is an effective limit to the number of macro names that can be
listed in the command line; the current maximum command line length is
about 119 characters -- characters beyond that are ignored.  An error will
occur if there are not enough macro names in the command for the given
repeat arg.


Because of the new ⊗XCASE command, the old ⊗XCANCEL command can no longer
be abbreviated ⊗XCA<cr>.

Also:

 Bug fix to ⊗XREDEFINE when macro text from page starts with a tab.
 Macro pushdown list size has been increased from 24 to 48 (decimal).
 Macro pushdown overflow stops all macros but now preserves stack for ⊗XRESUME.
 ⊗-⊗#⊗XUNDELETE info message suppressed in terse mode.
 Bug fix to restore autoburping.

∂30 Sept 78 -- More ⊗XRAPID macro operation when using line editor.  ⊗XBLOAT cmd.

NEW MACRO FEATURES:

The new (temporary!) command ⊗XRAPID makes macros try to use E's new line
editor simulator, which can reduce macro execution times by as much as a
factor of 10.  (Macros that do not use the line editor are not affected by
the creation of the simulator.)  The line editor simulator is fairly
primitive in that it can only do a limited number of line editor
operations, but when the simulator cannot handle a line editor command,
the real line editor is used instead.  Thus macros will work the same with
or without the simulator, but execution time will be reduced if the
simulator can handle all the line editor operations in a given sequence.
Since the simulator avoids doing any UUOs that invoke the real line
editor, line editor simulation is up to 10 times as fast as real line
editor use.  It is possible that there might be some undiscovered bug(s)
in the simulator -- hence the ⊗XRAPID command must be given to enable use
of the simulator.  However, when the simulator has shown itself to be bug
free (which it may already be), it will become permanently enabled and the
⊗XRAPID command will go away.  For now, the ⊗-⊗XRAPID command disables use
of the simulator.

The ⊗XSET command has been extended to allow a simple assignment statement
that copies one numeric macro value into another macro.  Thus
	⊗XSET FOO ← BAZ <cr>
sets FOO to the numeric value of BAZ.  (Equals-sign (=) can be used in
place of the left-arrow.)  Neither the first nor the second macro name can
be blank when this form of ⊗XSET is used.  The second name can be that of a
readonly variable (ending with ".").  This command is needed to copy
large-valued numeric macros, since ⊗XARGUMENT BAZ<cr>⊗XSET FOO<cr> will
truncate BAZ's absolute numeric value to 2↑17 - 8, which is the maximum
legal repeat argument.  Eventually, ⊗XSET FOO = <algebraic expression> <cr>
may be implemented.  If only one macro name appears in the ⊗XSET command,
and if no left-arrow or equals-sign appears, then the named macro is set to
the value of the repeat argument, as before.  The ⊗XSET command may be
aborted if E can't figure out what you wanted.

The new ⊗XSAY command simply types out (1) the text on the command line
after "SAY " and then (2) the decimal repeat arg, if any.  The typeout is
ended with a <crlf> if αβX is used or with a <space> if αX is used in the
command.  This command can be useful inside macros to report the status of
the macro execution, but it works outside of macros as well.

In the ⊗XREDEFINE and ⊗XEXECUTE commands, two escape sequences have been
added to allow comments to be embedded in the text of commands (e.g., in
command files).  The first form makes the rest of the current line be
treated as comments, and the second form allows comments to occur in
the middle of a line.  These escape sequences are more useful for comments
in macro definitions than the ⊗XCOMMENT command because the latter causes
the comment line actually to become part of the macro definition.

	⊗;	Ignore text from here to end of line (to next CR, LF, or FF).
	⊗⊂	(Left horseshoe) Ignore from here to first right-horseshoe (⊃).


MISC NEW FEATURES:

⊗#⊗XBLOAT writes out the current page with at least # records of nulls to
provide space for text to added later.  This command is useful if you are
preparing to add a lot of text to a page and you don't want E to have to
ripple every time you need one more record for the page's text.  If you
have the last page of the file in core, then this command will not write
out any extra records of nulls since they aren't needed to avoid rippling.
If you have more than one page in core, the extra space is allocated to
the last incore page.  This command disables autoburping if # exceeds the
current autoburp threshold, in order to avoid having the new bloatedness
autoburped away in the near future.

The ⊗XCA and ⊗XAL commands are the same as ⊗XCANCEL and ⊗XALIAS,
respectively, to allow abbreviation of these commands to two letters.

The commands αD and αI as search-string-ending commands are now once again
carried out at the beginning of the found string instead of at the
beginning of the line the string starts on.

∂12 Oct 78 -- Macro stepping and autostepping; errors that always STOPALL; more.

NEW READONLY VARIABLES FOR JUSTIFICATION MARGINS

The following readonly variables have been added for examining the
justification margins.  Those with the initial letter T are the margins
for the ⊗X TJxxx commands; those without the T are for the normal ⊗X Jxxx
commands.

  CMAR  TCMAR	Crown line indent (first line of paragraph).
  LMAR  TLMAR	Left margin (amount of indentation for body of paragraph).
  RMAR  TRMAR	Right margin; last column that will be used for text.
  BNUM  TBNUM	Blank line count -- number of blank lines put between paragraphs.
  CMARO TCMARO	Old crown indent; a line with CMARO indentation is taken as
  LMARO TLMARO	  starting a new paragraph, unless CMARO = LMARO.


GENERATING CHARACTERS FROM NUMERIC VALUES

The command ⊗#⊗XCHARACTER <numeric code for <character>> <cr> has the same
effect as typing ⊗#<character>.  Note that any repeat arg for the extended
command is passed to the indicated character, which should be between '001
and '777 inclusive (and the low-order 7 bits must not be zero); thus the
CONTROL ('200) and META ('400) bits can be included in the character.  The
⊗XCHARACTER command is primarily for macros that want to generate text
and/or commands from numeric calculations, but it can also be used to type
any command character(s) that your keyboard cannot otherwise input (e.g.,
if some key is broken).  (Note that ⊗XCHARACTER isn't legal in the middle
of another command, so you can't always avoid typing a certain character.)

The character's numeric code can be entered as a constant (decimal, unless
preceded by right single quote (') which makes it octal); or it can be
entered as the name of a numeric macro or readonly variable, in which case
the value of the named entity will be used.  Thus, the command
αβ2⊗XCHARACTER ASCII.<cr> will cause the current character to be typed
twice.


SPECIFYING FOLLOWING NUMERIC ARGUMENTS TO EXTENDED COMMANDS WITH
    NUMERIC MACROS, READONLY VARIABLES, AND OCTAL CONSTANTS

Certain extended commands that normally take one or more decimal numbers
following the command name will now accept the name of a numeric macro
or readonly variable in place of the decimal constant.  For instance,
⊗XBREAK RMAR.<cr> will break the current line at the column that is the
right margin for the normal justification commands.

The same extended commands (see list below) will also accept an octal
constant instead of decimal.  Octal is indicated by preceding the number
with a right single quote ('); for instance, ⊗XBREAK '177<cr>.

The commands that currently accept these alternative forms for a number
following the command name are:
	⊗XBREAK
	⊗XCHARACTER
Eventually almost all extended commands will accept these alternative forms.


LINE-EDITOR-ENTERING COMMANDS GIVEN FROM THE LINE EDITOR

E commands that normally cause the current line to be edited with the line
editor are now legal even when given from within the line editor itself.
Most of these commands are usually handled directly by the line editor,
without E ever seeing them.  But if such a command is generated in a way
that causes activation of the line editor, for instance, by preceded it
with a repeat argument using both CONTROL and META, then E now figures out
how to carry out the command, usually including reloading the line editor
with the resultant text.  Thus the command αβ8G will type eight G's into
the line editor, and αβ8βH will insert 8 H's.


ERROR MESSAGES FOR COMMANDS ILLEGAL FROM THE LINE EDITOR

The (in)famous general error message -- ?HUH? -- that E formerly typed
whenever a bad command was given from the line editor has been replaced with
specific error messages that attempt to tell you what was wrong, including
the actual bad command itself.  If the command is always illegal from
the line editor, or if it cannot be carried out from the line editor
in the current situation, then the error message will say something like
"Command illegal from line editor here" (plus the command itself).
This is particularly important when debugging a macro, because this
particular error ALWAYS stops all macros in progress, regardless of the
current STOPxxx setting.


CERTAIN ERRORS ALWAYS TREATED AS IF STOPALL MODE IN EFFECT FOR MACROS

Certain errors that E detects now always cause stopping of all macros
in progress, regardless of the current STOPxxx setting.  These errors
are never expected to occur deliberately inside macros, and so they
stop all macro execution as an aid to macro debugging.  The current
such "fatal" errors for macro execution are:

	Unrecognized command character
	Ambiguous (extended) command
	Unknown (extended) command
	Syntax error in extended command line
	Can't exit while expanding a macro
	Command illegal from line editor here
	Macro pushdown list overflow
	Macro text for line editor is too long
	(Syntax error in LISPSYNTAX command)
	Cannot execute a readonly variable


DEBUGGING MACROS BY STEPPING

Some facilities are provided to allow the user to debug even complicated E
macros.  With these facilities, it is possible to step through macro
expansion (possibly pausing a little at each step) while having the
display updated to see the result of each step or of selected steps in the
macro expansion.  While E is stepping a macro, it will type out the
characters of each step just before that step is carried out.  Whenever E
is pausing at a certain macro step, ESC I will, as usual, immediately
abort all macros in progress.  When a macro step pause occurs from the
line editor, the display of the line editor text will be done by E and a
cursor will be displayed at the proper character within the line.  This
pausing in the "line editor" can be identified on DDs and IIIs by the
slightly wider cursor and on DMs by the "line editor" text NOT being
displayed in BOLD; this is to avoid fooling you into thinking that the
macro has ENDED in the line editor.

A macro step generally involves one complete E command -- for instance not
just ⊗X but a whole extended command line when ⊗X is encountered.
However, any sequence of all line editor commands given from WITHIN the
line editor, none of which would activate the line editor, is treated as a
single step along with the first (complete) command that does activate the
line editor.  Such a sequence does not include the command that made E
enter the line editor; that command is taken as a separate step.

The ⊗#⊗V command causes E to update the display immediately and then pause
# seconds.  If the ⊗# is omitted, then E will merely update the display
without pausing.  This is an old feature, but the display updating now
works properly even if the ⊗V is given from the line editor.

The ⊗#⊗XAUTOSTEP command enables a mode in which EVERY macro called is
executed by pausing # seconds after each step.  See the second paragraph
above for what constitutes a single step.  The command ⊗-⊗XAUTOSTEP
disables this mode of automatic stepping of macros, and ⊗0⊗XAUTOSTEP
reports the status of this mode.  The readonly variable STEP. contains the
number of seconds per pause, or a zero or negative number if autostepping
is disabled.

For manually stepping macros, there are two commands available:
	⊗#⊗XSTEP <optional macro name> <cr>
	⊗#⊗&
The extended command version optionally takes a macro name following the
command name; if a macro name is given (the blank name is not permitted),
then this command will call that macro and execute # steps before
stopping (a repeat arg of 1 will be used for this macro call).  If no
macro name is given with ⊗XSTEP, or if the command ⊗& is used, then macro
execution is RESUMED (where it previous left off) for # steps (where # is
the argument to the command); thus when macro execution has been
interrupted, you can single step the remainder of the macro(s) with the
⊗& command.  Another difference between ⊗& and ⊗XSTEP is that the latter
will cause an explicit message to be typed out when the given number of
steps have been executed -- "Stepping done, in <macro name>"; this
message is always suppressed for the ⊗& command and by Terse mode with
the ⊗XSTEP command.  Note that if you give one of the stepping commands
while in AUTOSTEP mode, E will still pause after each step, but it will
quit stepping when the stepping count has been exhausted.


LINE EDITOR DISPLAY UPDATED WHILE TYPING REMAINDER OF COMMAND

When you activate the line editor with part of a command that might end up
returning you to the line editor without having accepted the edited
version of the line, E will redraw the line editor text while awaiting the
rest of the command.  This currently applies to the following partial
commands: ⊗X ⊗Z.  Also drawn will be a special cursor to indicate where in
the line you are giving the command from.  (The cursor is the same one
you'll see when stepping macros -- wider than the normal ones on DDs and
IIIs.)  However, if the line is longer than the screen width, the wrapped
around part of the line will not be displayed, nor will the cursor if it
is in that part.


OTHER MISCELLANEOUS FIXES:

⊗XNDFAIL has been fixed not to make entries for "zero-length" labels.
Two line editor simulator (⊗XRAPID) bugs fixed: overtyping and α<tab>.
  Soon ⊗XRAPID will become the default.
The macro expander's line editor handler now understands that αD and αI
  activate immediately on an empty line.
Directory errors encountered on reading in a page (missing pagemark at
  beginning of page, or ending pagemark not at proper record) are fatal
  unless in /R mode.  You can no longer continue after these errors unless
  you are in /R mode, and in any case you will not be allowed to change
  the file.

∂2 Nov 78 -- Two minor bug fixes.

 ⊗∂<plain char> now works again.
 ⊗XCHARACTER and ⊗XBREAK now evaluate numeric macros and readonly
   variables properly.

∂10 Nov 78 -- Leading empty lines omitted in text given to MAIL.

 The ⊗XMAIL, ⊗XSEND and ⊗XREMIND commands now omit any leading empty lines
 in the range of lines being given to the MAIL program.  This allows you
 to, for instance, enter a one paragraph message at the end of a page
 (preceded by a empty line) and then, while pointing anywhere within the
 paragraph (including the end of the page), mail the paragraph with
 α!⊗XMAIL, which will conveniently ignore the empty line that starts the
 paragraph (as defined by the α! command).

∂15 Nov 78 -- E now handles pages with more than 2↑18 chars.

 The page size limit is now about 2↑27 characters, but the core size
 limit of 256P for the lower segment is the real limiting factor.

∂17 Nov 78 -- ⊗XNDBBOARD command for updating directory line in \BBOARD file.

 The new command ⊗XNDBBOARD (New Directory-line for \BBOARD) generates a
 new directory line for the current page from the old directory line,
 assuming it is in the MAIL message header format or the ⊗XNDBBOARD
 format.  These two formats are distinguished by whether the first space
 in the line is followed by a second space.  If so, then is MAIL format
 and this command flushes the original time from the header and inserts
 the current date and the current user's programmer name after the
 original programmer name.  If the old directory line was already in
 ⊗XNDBBOARD format, then the update date is replaced by the current date
 and the updating programmer name is replaced with the current user's
 programmer name.  No guarantees are made about what this command will do
 with a page whose first line is in any other format.  Note that this
 command does not delete the old header line (the user should do that
 himself), but it does replace any initial partial-sign (∂) in that line
 with a greater-than sign (>) to make sure the ⊗∂ command will still work
 on the whole message.

 Also, .MFT (METAFONT) has been added to E's list of good extensions.

∂19 Nov 78 -- ⊗XRAPID mode bug fixed and ⊗0⊗XRAPID now reports mode.

 A bug in the line editor simulator (⊗XRAPID mode) has been fixed.  The
 bug occurred (and was usually fatal) when a macro generated a line editor
 activator when the cursor pointed to a tab in the (simulated) line
 editor.  Very soon now, ⊗XRAPID mode will become the default.

 Also, ⊗0⊗XRAPID now reports whether the line editor simulator (for
 macros) is enabled (⊗XRAPID mode) or disabled (⊗-⊗XRAPID mode).

 Finally, the ⊗XWRITTEN command now works even right after you have
 reformatted a file (w/ or w/o a directory).

∂22 Nov 78 -- Nine new single character macro calling cmds (top digits).

 The nine new single-character commands ⊗≡ ⊗∩ ⊗∪ ⊗⊂ ⊗⊃ ⊗$ ⊗% ⊗~ ⊗_ (all
 found on the top of the digit keys on SU-AI keyboards) can now be defined
 as macros.  The names of these macros (for use in macro-handling commands
 like ⊗XDEFINE <macro name>) are the same as the command names (less the
 CONTROL/META bits).  Thus, ⊗XDEFINE $<cr> lets you define the ⊗$ command
 as a macro, and ⊗Z$<cr> executes the $ macro just like the ⊗$ command
 does.  Of course, ⊗0⊗$ will type out the definition of the $ macro (if
 any), and ⊗#⊗$ will call the $ macro with a repeat arg of #.

 There is one special feature of these special single-character macros:
 namely, the ⊗Y command will NEVER execute any of these macros, since
 each of them has its own single-character command.  That is, defining
 (or calling with the ⊗Z command) any of these macros does not change
 the default macro that ⊗Y will execute (as would be the case for a
 normal macro definition or call from the top level).

∂27 Nov 78 -- ⊗XSET can copy whole macros.

 The command ⊗XSET <macro1>←<macro2> now copies the whole of <macro2>'s
 definition into the new defintion of <macro1> (formerly this only copied
 the numeric value of the second macro into the first).  Also, the second
 macro name can now be blank (e.g., ⊗XSET MAC←<cr>); thus even the
 definition of the blank-named macro can be copied (in case you forgot to
 enter a non-blank name when you defined the macro).

 Also, the extension .TFX has been added to E's list of bad filename
 extensions, and .TFD has been added to E's good extension list.

∂1 Dec 78 -- Minor fix to macro stepping routines.

∂7 Dec 78 -- New improved vertical movement commands: α; αβ; α: αβ:

 The four vertical movement commands α; αβ; α: αβ: have been slightly
 changed to improve their usefulness.  It is now possible to move up and
 down with these commands, passing through short (or empty) lines and
 through tabs without losing your "column of interest".  The double-bucky
 commands αβ; and αβ: now set the "column of interest" to the column where
 the command is given (if you are in the line editor).  These double-bucky
 commands then move to the new line and try to position you to the new
 column of interest.  The CONTROL-only commands α; and α: merely move
 you to the new line and position you at the old (and unchanged) column of
 interest.  Thus, when you are moving up or down on a page, you should use
 the αβ; or αβ: version THE FIRST TIME, in order to set the column of
 interest, and thereafter use only the α; and a: commands, until you want
 to change your column of interest.  Note:  The αβ; and αβ: commands do
 not set a new column of interest except when given from within the line
 editor.

 The current "column of interest" for the ⊗; and ⊗: commands can be
 accessed in the Readonly Variable "COLINT.".

 Also, ⊗XPOINTER recognizes filenames preceded by "@".  

∂11 Dec 78 -- Fix to avoid runaway detached E jobs.

1979

∂1 Jan 79 -- Three minor fixes.

 Bug fix to ⊗XTJxxx and ⊗XTABLE commands to avoid screwing up when
   in attach mode.
 Bug fix to ⊗XNDBBOARD command on DMs to properly update display of
   old first line if "∂" changed to ">".
 Good extension .MFT changed to .MF for Metafont.

∂4 Jan 79 -- Fix to ⊗/ command when given in insert mode for top window line.

∂5 Jan 79 -- Attempt to minimize frequency of display lossage on DDs.

 To reduce the frequency of half-field DD display trouble, a slight
 compromise was needed for DD displaying.  Namely, if a line has 9 or 10
 tabs in the first 80 columns, then the characters in columns 81 to 84 may
 not get displayed by E (they will of course appear in the line editor, as
 do characters beyond column 84).  In particular, with 9 tabs in the first
 80 columns, characters in columns 83 and 84 will not be displayed, and
 with 10 tabs in the first 80 columns, characters in columns 81 through 84
 will not be displayed.  This change seems to have cut the frequency of DD
 display trouble by a factor of 10 (a system mod has lessened the problem
 further still).

∂29 Jan 79 -- Minor fixes.

 The ⊗XNDFAIL command now recognizes symbols up to 20 chars in length, but
   symbols can contain only:  letters, digits, and any of ".%_$".
 Bug fix to handling of the characters ≤ and ≥ in justification.
 Bug fix to <vt> in attach mode to correctly position attach buffer at
   bottom of screen.
 The ⊗0⊗J command in attach mode centers among non-attached text on screen.

∂9 Feb 79 -- New search limiting capability, readonly variables, and more.

 The commands ⊗XSSLINE and ⊗XSSPAGE set or report the limit line number
 and limit page number for searches and substitutions.  These commands can
 be used to keep searches and substitutions from going beyond a given
 incore line or a given page; search limiting affects these commands:

	⊗F ⊗XFIND ⊗* ⊗\ ⊗( ⊗) ⊗XLPAREN ⊗XRPAREN

 The ⊗#⊗XSSLINE command sets the search-limiting incore LINE number to the
 given argument (#), and similarly ⊗#⊗XSSPAGE sets the search-limiting
 PAGE number to the argument (#).  In both cases, if the argument is
 relative (⊗+ or ⊗- used), then the limit is set by the command at the
 given distance (lines or pages) from the current place (line or page)
 (but is fixed once set by the command; that is, it is not permanently
 relative to the arrow's position).  If the argument is omitted entirely,
 then the corresponding type of search limiting is disabled.  A zero
 argument will cause E simply to report the given search-limit.

 Search-limiting stops any search (except a directory search, see below)
 that encounters the given limit line or the beginning of the given limit
 page; for instance, ⊗5⊗XSSPAGE will stop any search that encounters the
 beginning of page 5, so page 5 will NOT be searched (but a search started
 already on page 5 won't be limited).  As another example, ⊗+⊗XSSLINE will
 limit any search to the current line, since it will stop any search upon
 reaching the following line.  The search-limiting LINE number applies
 only to incore text and is cleared when you flush all incore text (e.g.,
 by going to another page or by doing an ⊗XCANCEL command).  The
 search-limiting PAGE number applies both to incore pagemarks and to
 not-in-core pages (the latter reached only by the ⊗XFIND, ⊗XLPAREN, and
 ⊗XRPAREN commands); the limiting page number is cleared when you change
 files.  Search limiting is always completely disabled during directory
 searches (e.g., ⊗F...⊗P and ⊗F...⊗:).

 Any incore limit line number set up is adjusted for text insertion and
 deletion, to preserve the point in the text at which searches will stop.
 Currently, however, any limit page number is NOT adjusted for page
 insertion/deletion.  The two new readonly variables SSLINE. and SSPAGE.
 are available for macros to find out the current search limits; a
 negative or zero value means the corresponding type of search limiting is
 disabled.  Note that the limit LINE number is counted from the beginning
 of ALL incore lines, not just relative to the current page if you have
 more than one page in core.


 Three new readonly variables have been added for finding out how many
 occurrences of the current search string were
	(1) searched for:    NFIND.
	(2) found:	     NFOUND.
	(3) substituted for: NSUBST.
 in the last search (or substitution) command.  If that search included at
 least one successful substitution, then NFOUND. will be zero and NSUBST.
 will be positive.  If the last search did not do (but maybe tried and
 failed) any substitutions, then NSUBST. will be zero and NFOUND. will be
 the number of occurrences found (possibly zero).  NFIND. contains the
 requested number of search or substitution repeats.  The only slightly
 obscure case is a command like ⊗4⊗F...⊗\...αβ9<cr>, which asks to do 9
 substitutions starting with the 4th occurrence; if less than 4
 occurrences are found, then NFIND. will be 4, NFOUND. will be less than
 4, and NSUBST. will be zero, but if 4 or more occurrences are found, then
 NFIND. will be 9 (NOT 4), NFOUND. will be zero (meaning we did some
 substitutions), and NSUBST. will be the number of substitutions done.


 The filehack \NEWS has been added to access the new NYT NewsSummary file
 NEWS.TXT[2,2].  The NYT NewsSummary is similar to the AP News Digest.

 The αXSAY command no longer puts a space at the end of the text it types
 out.  You can of course put a space at the end of the αXSAY command line.

 The command ⊗\ no longer accidentally ignores the first #-1 occurrences
 if you had just given a ⊗#⊗* command.  Also, ⊗#⊗F...⊗\...⊗∞<cr> no longer
 substitutes only for every #th occurrence, but does every occurrence
 starting with the #th, as previously advertised.

 E now correctly detects an old E directory in a file that has been edited
 with SOS and which now has line numbers.  You get a chance to flush the
 directory when you are reformatting with E (formerly E treated the old
 directory as plain text).

 ⊗XEXECUTE and ⊗XPUTDEFS now set the new default filename for these
 commands only upon success in reading or writing the given file.

 Stepping macros now properly aborts N levels (upon error or ⊗#⊗XABORT
 command) BEFORE finishing the stepping.  Makes macro stepping work on fancy
 macros.

 The arrow line number at the bottom is now properly updated after a ⊗*
 command, and the screen erasing is now done correctly upon ⊗XBOTSET.

 The ⊗XNDBBOARD command has really been fixed this time to update the
 display of the old first line on a DM if ∂ became >.

∂20 Feb 79 -- New listing of commands at beginning of each page of E.ALS.

 In the main part of E.ALS, every page that describes one or more
 particular commands now begins with a list of all commands described on
 that page.  This list is a duplication of all the one-line entries from
 the index on page 3 that refer to the given page.  Thus the beginnings of
 every page of E.ALS along with the directory together form a "functional
 index" of E commands.

∂3 Mar 79 -- Omitted second arg in two-arg filename switches defaults to zero.

 This allows you to type, for example, ET \B/11M/22M/33M,\G/4M<cr> to put
 line marks at the beginnings of pages 11, 22 and 33 in the BBOARD file,
 and page 4 in the GRIPES file (in case the CKSUM program just told you
 that those pages had changed, for example).  Then you can use the αM
 command to get to the indicated pages.  In this case, the second arg of
 each /M switch is omitted (the second arg is the line number), but is
 taken to be zero; formerly, an omitted second arg got a random value.
 (Remember that you cannot add marks to a file that already appears in
 your file stack, e.g., from a previous edit, since that file's old line
 marks are restored.)

∂14 Mar 79 -- New WINTOP. and SRCHAR. readonly variables, plus misc.

 Two new readonly variables have been added:

   SRCHAR.   The character position of the place where the last search
	     string was found on the current line; this is the position
	     where the α<cr> command will take you if you aren't already in
	     the line editor.  A value of 0 represents the first character
	     in the line, and a value of -1 means no successful search was
	     recently done ending on the current line.
   WINTOP.   The number of the top line in the current window, relative to
	     the first incore line (NOT relative to the current page).


 "Calls on stack deleted for macro ..." suppressed in Terse mode.

 Maximum display height supported increased to 62 (decimal) (for simulated DMs).

∂3 Apr 79 -- ⊗X RAPID mode is now the default.

 Also, E now ignores the /x,yM switch if the mark table is already full.

∂5 Apr 79 -- [MUS,DOC] added to list of PPNs searched by READ command.

∂11 Apr 79 -- ⊗XDFIND command added to start up FIND program on another job.

 ⊗XDFIND starts up the FIND program on another job and passes it the
 entire extended command line (starting with the DFIND) to have it search
 a given file for some string(s).  When the FIND program finishes, it will
 report the results of the search by typing out a special message on the
 initiating terminal.  This can be useful for having FIND look up a
 suspected word spelling in the unabridged dictionary (the default file to
 search); however, note that searching the unabridged dictionary takes
 about 12.5 seconds of (wholine-type) runtime.  You can use DFIND to
 search any given file by using the standard syntax of the FIND program,
 which is documented in FIND.DON[UP,DOC].  (Note that you cannot run the
 FIND program with command FIND or OFIND; only the DFIND command is
 available for running the FIND program from E.)

 The ⊗XDFIND command starts up a phantom job to do the search, and a
 summary of the results are sent to your terminal.  The summary includes
 the number of hits, as well as the first, last, and (if different)
 shortest "hit" lines.  The syntax of the DFIND command in E is the same
 as that of the monitor command, with the same defaults for the WITHIN,
 OMIT, and IN clauses.  (If you specify a WITHIN other than the default of
 WITHIN LINE, only the lines containing the hit will be reported.  This
 isn't quite the same as WITHIN LINE, since a text unit containing several
 matches yields only one hit.)

 If you type just ⊗XDFIND<cr>, the current line of text (or the first
 line of attached text, if any) will be used to specify the search
 parameters.

∂27 Apr 79 -- Two minor bug fixes.

 A DM display bug has been fixed that caused the number of the arrow line
 to overwrite the line editor in a rare situation when overtyping the row
 of stars.

 A bug in the spooler subroutine has been fixed that caused E to sometimes
 be stopped with the system error message Non-ex Name or Number when the
 spooler job did not exist.

∂27 May 79 -- ⊗XPOINTER command accepts filenames like PROGR.>[1,PRG].

 Also, a bug in ⊗XREDEFINE's handling of comments starting with ⊗; is fixed.

∂5 Jun 79 -- Free /N mode for one-page files.

 When you try to edit a one-page directoryless file not in /R mode, E will
 no longer ask you about formatting the file.  Instead, E will
 automatically open the file in /N mode, but WITHOUT RECOPYING THE FILE.
 This works for one-page files because they are always formatted properly
 (each page beginning on a record boundary).  Thus, switching to a
 one-page file is now slightly faster (no copy is made) and no longer
 requires one of the /N or /R switches.

∂17 Jun 79 -- ⊗XSPOOL and ⊗XXSPOOL no longer include E header & trailer lines.

 By popular demand, the ⊗XSPOOL and ⊗XXSPOOL commands have been modified
 to omit the E header and trailer lines from the text sent to the spooler.
 Also, any incore pagemark that is among the text being spooled will be
 printed as a normal formfeed, causing the following text to be printed
 on a separate page by the spooler.

∂21 Jun 79 -- Extensions .WL and .WLS (text files) taken off bad extension list.

∂2 Jul 79 -- Free /N mode for one-page files has now been completed.

 E now allows you to change from READONLY mode to READWRITE mode when
 exiting from a one-page directoryless file, since one-page files are
 always formatted correctly even without a directory.  Accordingly, E no
 longer complains when you make an incore change to the text of a one-page
 file that is open in /R mode, since you'll get a chance later to change
 to READWRITE mode.  In summary, it is now very convenient to maintain
 and edit one-page files without an E directory.

 Also, E no longer asks the question "Will you settle for /N mode?" when
 you ask it to edit a file that has no directory.  (This was the third
 and last question asked in the sequence of formatting questions.)  You
 can, however, still respond /N to either of the first two questions, and
 of course, you can still use the /N switch after a filename.

∂5 Jul 79 -- ⊗XPOINTER command doesn't accept ".>>" as extension.

∂25 Jul 79 -- E now reports which jobs are using a file that you try to write.

 E uses the new FILUSR UUO to find out who is using the file you have
 been editing when your attempt to write out a page fails because the
 file is busy.  E types out the wholine of each job with the file open.

∂1 Aug 79 -- Who else is using the file you want to write out!

The ⊗XOPEN command, which opens the file for writing in order to lock
other users out of the file, now first finds out if anyone else is already
using the file.  If so, then ⊗XOPEN will fail and report who is using the
file (this failure is a permanent-STOPALL error for macro expansion).
Formerly, ⊗XOPEN was not permitted to fail, so if the file were busy, you
got kicked out to the monitor and could either do a CONTINUE to re-try or
a REENTER to save your text.  Those options are still the only ones
available if the file is busy when you actually try to write it out.  If
you think someone else might be using the file, then use the ⊗XOPEN
command before the ⊗. command.

With a zero argument, ⊗0⊗XOPEN simply tells you who else, if anyone, is
using the file that you are currently editing.  That is, the zero argument
suppresses the actual attempt to open the file, but it tells you whether
you could open the file successfully if you wanted to.

When you try to switch to a file that is busy, E now reports who is using
the busy file.

∂17 Aug 79 -- ⊗XRAPID mode macro bug fix; improved .> extension feature.

A bug has been fixed in E's macro line editor simulator (simulator invoked
in ⊗XRAPID mode (the default mode)).  The bug only struck when a β<cr> was
typed in the line editor while positioned at a <tab> that wasn't the
equivalent of 8 spaces at the time.

When the filename extension .> is given for a file that has to be created,
the extension of the newly created file will be generated by incrementing
the largest previously existing numeric extension found (with the given
primary file name).  That is, if you say, for example,   ⊗ε FOO.>/C   or
⊗ε FOO.> ← BAZ   and if you already have files FOO.1 and FOO.2, then the
new file created (or copied from BAZ) will be called FOO.3.  If leading
zeroes were present in the previous largest numeric extension, then they
will be present in the new extension.  If the previous extension was .999,
then the new extension will be .000.  If you say   ⊗ε FOO.> ← FOO.>  and
if you already have FOO.1 and FOO.2, then FOO.2 will be copied to FOO.3
and E will then edit FOO.3.

∂22 Sep 79 -- Right single quote (') added to sentence ending bracketers.

For the justification commands, the character right single quote (') has
been added to the list of special characters >]}")' that are considered
part of a sentence immediately preceding that is ended with one of the
.?!: characters.  The right quote character is included since single
quotes are sometimes used (either singly or doubled) to quote sentences.

1980

∂16 Jan 80 -- Lots of new readonly variables.

 The ⊗XNDBBOARD command is now illegal in the Gripes file.

 The following readonly variables have been added:

   EDLINE.   This flag is 1 iff you are in the line editor editing a line
		of text.
   WFLAG.    This flag is 1 iff the W flag in the header is on (page
		changed).
   NMODE.    This flag is 1 iff the file is being edited in /N mode.
   RMODE.    This flag is 1 iff the file is being edited in /R mode.
   IMODE.    This flag is 1 iff you are currently in line insert mode.
   RAPID.    This flag is negative iff RAPID simulation of the line editor
		by macros is disabled.
   TERSE.    This three-state flag is -1 when in TERSE mode, 0 in NORMAL
		mode, and 1 when in VERBOSE mode.
   SILENT.   This flag is positive iff macro error messages are suppressed.
   STOPHO.   This three-state flag is -1 when in STOPALL mode, 0 in
		STOPZERO mode, and 1 when in STOPONE mode.
   CHECK.    This flag is negative iff internal error checking of free
		storage is disabled.
   UNDMAX.   This is the maximum number of characters that will be saved in
		lines that can be undeleted.
   UNDCHS.   This is the current number of characters in lines that can be
		undeleted.
   UNDLNS.   This is the current number of lines that can be undeleted.
   AUTOBU.   This is the current threshold of null records for autoburping.
		This number is non-positive if autoburping is disabled.
   BRKCOL.   This is the current default column at which ⊗XBREAK will break
		lines.
   ECHO.     This flag is negative if echoing of line editor input is
		disabled.

∂25 Jan 80 -- Minor macro improvements; fix to ⊗XEMPTY and ⊗XNONEMPTY.

 The commands ⊗XEMPTY and ⊗XNONEMPTY now work as advertised when given
   negative arguments (namely, they back up that many empty/nonempty lines).

 To avoid having the ⊗XEXECUTE of one file aborted when a command file
   executes another command file of a similar name, the ⊗XEXECUTE command
   now tries to avoid duplicating a macro name that already exists.  This
   command makes up a name for the macro to represent the file being
   executed, normally by inserting a dot (".") in front of the the primary
   name of the file (e.g., ".EINIT").  But if that macro name already
   exists (because you are executing one file from another, both with the
   same primary file name), then, in order to generate a unique macro
   name, the leading character is incremented from "." to "/", and then,
   if still necessary, through the characters "./0123456789:;<=>?@".

 When incore text that you have changed cannot be written out (e.g., from
   the directory page), a warning message to that effect is normally
   given.  This warning message, however, is now suppressed if the text is
   being changed from within a macro.  This is to allow macros to change
   such text for purposes such as generating other macros from the incore
   text.  However, any attempt to write out such text from within a macro
   will stop all macros fatally (after the current command from macro).

∂7 Feb 80 -- Misc. minor features.

 ⊗XEXACT now legal from line editor.

 Fix to ⊗XCENTER command to avoid dying on syntax error in command.

 New readonly variables:
	MDEPTH.   Current macro depth.
	EXACT.    Positive for ⊗XEXACT mode.
 ⊗XPAREN cmd suppresses "Using symbol pair .." when in macro or terse mode.
 Failure to open file by ⊗XOPEN command is no longer permanent STOPALL error.
 ⊗XEXACT cmd with non-zero arg suppresses status report in Terse mode.
 Extended command buffer elongated to hold about 160 chars.

∂24 Apr 80 -- Two minor changes.

 The character "#" is now allowed to precede filenames to be referenced
 by the ⊗XPOINTER command.

 The extension .DO has been added to E's list of good extensions to look
 for, and the extension .VRN has been added to the bad extension list.

∂27 Jun 80 -- New good and bad extensions added to lists.

 The extensions .MSG and .AL have been added to E's list of good file
 extensions to look for, and the extensions .BIN and .PIC have been
 added to E's list of bad file extensions to avoid.  The complete lists
 of extensions are now displayed on p. 31 of this file (E.ALS).

∂11 Jul 80 -- Changing pages (or files) with the current page having
 been changed, but with the file in READONLY mode, is now a permanent
 STOPALL macro error.

∂14 Jul 80 -- Minor changes.

 Terse mode suppresses the messages (from ⊗XZFILE command and file switching):
   "Current file record shifted to 0, the rest have been flushed".
   "Fileswitch list full -- replacing FILE.EXT".

 The error "No such readonly variable" is now a permanent STOPALL macro error.

∂14 Aug 80 -- Justification cmds accept numeric macros/readonly variables.

 All of the various extended justification commands now accept numeric
 macros or readonly variables or octal numbers where formerly only decimal
 numbers were accepted.  E.g., you can say 
	⊗XJFILL AA,LINE.,88,'10
 where AA is a numeric macro, LINE. is a readonly variable, 88 is decimal
 and '10 is octal.  (The commands affected are:  ALIGN,CENTER,INDENT,
 JFILL,JGET,JUST,SJFILL,SJUST,TABLE,TGET,TJFILL,TJGET,TJUST.)

 In the table justification commands, ⊗XTJFILL, ⊗XTJUST, ⊗XTABLE, ⊗XTGET,
 to specify the end of a new set of tab fields, you now use -1 instead of
 "Z" (since "Z" could be a macro name).  For instance, ⊗XTJFILL ;3,4,-1
 will make there be precisely two tab fields (w/widths 3 and 4).

 A syntax error in any of the justification commands will cause the
 remainder of the command to be typed out to indicate the point of error.

 An ENTER failure on an attempt to create a file (possibly in doing a
 copy) now immediately asks for a new filename, instead of dumping you to
 the monitor.

 Also, attempting to create a file on a device different from the previous
 device now works.

 The new readonly variables INDENT. and ALIGN. contain the default
 indentations for the ⊗XINDENT and ⊗XALIGN commands, respectively.  Note
 that INDENT. can be negative (meaning ⊗XINDENT will un-indent)!

∂26 Aug 80 -- Automatic EXECUTEs, letter case commands, more (un-)attach cmds.

The macro reading and writing commands ⊗XEXECUTE and ⊗XPUTDEFS now always
use as their default the file EINIT.CMD on the user's login disk area.
Formerly, these commands changed the default for subsequent commands, but
they no longer do so.  Of course, when an explicit filename is given in
the command, that filename is used in place of the default filename, but
such a given filename does not affect subsequent ⊗XEXECUTE or ⊗XPUTDEFS
commands.


	AUTOMATIC EXECUTION

E now provides for automatic execution of selected commands when E starts.
For speedy checking for these commands, a TMPCOR file called EIN is used.
When E starts up, if the EIN tmpcor file exists, then it is executed just
like it were a piece of an EINIT file.  Since TMPCOR space per job is
somewhat limited, the idea is to place in the EIN file an ⊗XEXECUTE
command that specifies what EINIT file page(s) should be executed.

The EIN file itself can be set up automatically by use of the LOGIN option
EINIT.  There are three forms for this option.

  (1) The simplest option form says just "EINIT" and causes the EIN file
      to be set up with "αXEXECUT⊗C", which will make E execute your
      entire EINIT.CMD file upon startup.  (Note that ⊗C represents a
      carriage return when seen in a command file like this.)
  (2) To have E execute only a certain range of pages from EINIT.CMD, use
      the option form "EINIT(x:y)", meaning execute pages x through y of
      EINIT.CMD (the ":y" can be omittted to execute only page x).  This
      causes the EIN file to contain "αXEXECUT (x:y)⊗C"; note that login
      merely copies chars until it sees the right parenthesis -- the
      syntax will be checked by E when it executes the EIN file.
  (3) The most general form of this login option is "EINIT=\...\", where
      "..." is the text of the command string to be executed and "\" is an
      arbitrary delimiter not occurring in "...".  This option form causes
      the text string "..." to be written into the EIN tmpcor file,
      provided the string is not longer than the maximum allowable length
      (currently 50 characters).

For example, consider the OPTION.TXT lines:

LOGIN:EINIT(2),WHO,XMAIL,NOMAIL,BEEP;
LOGIN:EINIT=\αXEXECUT (2)⊗C\,WHO,XMAIL,NOMAIL,BEEP;

Either of these writes an EIN tmpcor file containing "αXEXECUT (2)⊗C".
Then whenever E is started up, it will find this EIN file and execute it,
which in turn will execute page two of the EINIT.CMD file on the user's
login disk area.  Note that the PPN of the tmpcor file is always that of
the login disk area, so this feature is not affected by the user aliasing
to different areas.

The switch /I given after the name of a file to be edited forces E to
execute the EIN file after it has opened the next file.  This has two
main uses, given that /I is the default when E starts up.  First, you
can prevent the execution of EIN upon startup by specifying the switch
/-I.  And you can give /I when switching files, particularly if you said
/-I when starting up.


	CASE-CHANGING COMMANDS

The commands ⊗XUPPERCASE, ⊗XLOWERCASE and ⊗XOTHERCASE are available for
changing the case of letters in a file.  Each of these three commands
takes a repeat argument that determines how much text is affected.  If no
argument is given, an argument value of one (⊗1) is assumed.  The commands
do what you might expect them to do: ⊗XUPPERCASE makes all letters in the
given range be upper case, ⊗XLOWERCASE makes letters be lower case, and
⊗XOTHERCASE changes the case of every letter in the range.

If any of these commands is given when NOT in the LINE EDITOR and NOT in
ATTACH MODE, then the command affects the specified number of lines of
text on the page.

Any of these commands given from the LINE EDITOR affects the specified
number of WORDS starting at the word the cursor is under.  A word is any
contiguous string of LETTERS and DIGITS plus any immediately preceding
string of characters containing no letters or digits (thus the space
between words is considered as part of the following word).

If the command is given while in ATTACH MODE, then it affects the
specified number of LINES in the ATTACH BUFFER.

A negative argument specifies words or lines preceding the cursor or
arrow, except when in attach mode, in which case a negative argument
specifies the given number of lines at the END of the attach buffer
instead of at the BEGINNING.

Neither the cursor nor the arrow is moved by any of these commands.


	ATTACH BUFFER: ADDING AND REMOVING LINES AT THE FRONT

There are new commands to complement the ways of adding lines to, or
removing lines from, the attach buffer.  Formerly most commands worked
only on the end of the attach buffer.  These new ones work on the front
of the buffer.

  ⊗#⊗E	Puts down # lines from the front of the attach buffer and
	then moves down past them.  This works only in attach mode.
 ⊗-⊗#⊗E	Adds # previous lines (that is, # lines before the attach buffer)
	to the front of attach buffer.  Thus, this undoes ⊗#⊗E.  This
	command works even if there were no lines already attached.  As
	with many commands, if ⊗# is omitted (but not ⊗-), ⊗1 is assumed.
⊗-⊗#αβK Copies # previous lines into the front of the attach buffer.
	Thus this is like ⊗-⊗#⊗E except that it copies the lines being
	put into the front of the attach buffer, leaving the original
	lines on the page.  If ⊗# is omitted (but not ⊗-), ⊗1 is assumed.

Because of the new argument forms of ⊗E, to get the Exiting form of ⊗E
(when not in attach mode), there must be no argument on the ⊗E at all.

Here is a summary of the various new and old commands to attach, copy,
kill, or unattach (put down) lines with the attach buffer.  Except where a
command without argument is described explicitly, an omitted argument ⊗#
is taken as ⊗1.

(* means new cmd, N is Normal mode, A is Attach mode, E is line Editor mode)
      Modes	Cmd	Meaning

      N,A,E	⊗#⊗A	Attach # lines
      N,A,E	⊗+⊗#⊗A	Attach # more lines to end of buffer
      A		⊗-⊗#⊗A	Put down last # lines in buffer, move above them
      N,E	⊗-⊗#⊗A	Attach # lines above current line (not in att mode)
      N,E	⊗#⊗C	Copy # lines into attach buffer (not in att mode)
      A		⊗#⊗C	Put down whole attach buffer, then copy # lines
      A		⊗C	Put down copy of whole attach buffer
      A		⊗+⊗#⊗C	Copy # more lines into end of buffer
      A		⊗-⊗#⊗C	Kill last # lines in attach buffer
      N,E	⊗-⊗#⊗C	Copy # lines just above current line (not in att mode)
      A		⊗E	Leave ATTACH mode by putting down all attached lines
*     A		⊗#⊗E	Put down first # lines in buffer, move past them
*     N,A	⊗-⊗#⊗E	Attach # more lines at front of buffer from above
      A		αβK	Kill all attached lines
      A		⊗#αβK	Kill first # lines in attach buffer
*     N,A	⊗-⊗#αβK	Copy # more lines to front of attach buffer from above
      A		αβR	Put attached lines back where they were picked up


	MISC. CHANGES AND FIXES

The commands ⊗/ (LISP code indenting) and ⊗XREDEFINE (macro defining) now
accept a search distance (⊗!, etc.) to specify the count of lines to work
with.  Thus α!αXREDEFINE now works to define a macro from the current
paragraph.

E no longer preloads the line editor (with the losing filename) after a
file error occurs on the original monitor command that starts up E.

E itself now reports any bad retrieval or full disk, instead of getting
stopped and having the monitor report it.  This makes it easier to
continue after one of these errors.

The area ART,DOC (for articles) has been added to the list of
documentation areas searched by the READ command (primarily for CCRMA).

Bug fix to ⊗#⊗XRESUME to type out unexecuted remainder of macro correctly.

Repeated cmds αβ↑,αβ↓,αβ<tab> no longer eventually cause a pushdown overflow.

Bug fix to ⊗#⊗XJGET when pointing to #-1 similar text lines followed
by a blank line.

∂29 Aug 80 -- Improved directory search commands.

In a directory search command, if the command ending the search string is
αβ: , then any found label will be positioned near the TOP of the windowful
(unless already in the current windowful) but if the terminating command is
α:, the label is positioned in the MIDDLE as always.  (The label search,
⊗F⊗:, is an old cmd.)  (Summary: ⊗Fαβ: positions near top, ⊗Fα: in middle.)

Directory searches that are looking for multiple occurrences of a string
in the directory (e.g., ⊗5⊗F...⊗P) will report the number found, if not
enough are found.

If a macro attempts to edit a line that is too long, a permanent-STOPALL
macro error will occur, stopping all macros in execution.

Bug fix to macro attempting to edit a line too long, from, e.g., α* command.

∂31 Aug 80 -- Fancier PPN search, includes devices (UDPs).

When the specified edit file doesn't exist, E will now try to find the
file on the PPN other than your alias where you last edited a file.
Whatever device that PPN was on (e.g., DSK or UDP) will be checked for the
currently specified file.  This feature applies only if: (1) there was no
PPN specified in the current filename; AND (2) the file-switching is not
being done inside a macro.  If the current filename included a device,
then only that device will be examined.  Note that there is no help in
finding the first file E is to edit, whose name is given in a monitor
command.  Comments are welcome on this heuristic for finding the file you
really want to edit.  Mail your comments to BUG-E.

Also, a minor bug has been fixed in the case-diddling commands.

∂7 Sept 80 -- ⊗XUPPER/LOWER/OTHERCASE commands accept ⊗! arg.

The extended commands UPPERCASE, LOWERCASE, and OTHERCASE now accept
repeat arguments defined by a search distance.  This means that the prefix
command ⊗! can be used to make any of these commands work on the entire
current paragraph, and ⊗Fstring⊗XUPPERCASE<cr> makes the case-changing
command work on text from the current line up to (but not including) the
line containing the first occurrence of "string").

∂9 Sept 80 -- Fix to ⊗XPOINTER command to avoid slight display screwup.

∂15 Sept 80 -- Formatting files on alternate PPN requires confirmation.

If E finds a file on a previously used PPN when you didn't specify a PPN,
any reformatting requested will require confirmation from you, even though
such confirmation is not required normally (i.e., when you give the
correct PPN).  This is to prevent accidental reformatting of a file you
didn't really mean to reformat.

∂17 Sept 80 -- Fix to minor display bug for ⊗-⊗#αβK command in attach mode.

∂18 Sept 80 -- Handling of bad filename from monitor command.

When E is given a bad filename (e.g, no such file, or bad name) from a
monitor command, the user can now use α<cr> to restore to the
line editor a line containing only the filename part of the monitor
command.  I.e., α<cr> at that point will omit any leading "ET" or "ER",
etc., of the original monitor command.  This makes α<cr> consistent for
filename errors whether from a monitor command or from a ⊗λ or ⊗ε command.

∂23 Sept 80 -- Switch /nK specifies protection for copy of file.

The switch /nK, where n is an octal number, specifies the disk protection
key to be given to a file being created in the current command.  That is,
ET FILE1←FILE2/5K will create FILE1 and give it a disk protection code of
005.  Similarly CE FILE3/77K will give FILE3 a protection of 077.  If the
octal value n of the switch is omitted or illegal, then a protection value
of 000 is used.  When E copies a file without this switch being used, the
protection of the old file is copied to that of the new one.  This can
sometimes cause the new file to be write-protected from its creator; to
avoid this, a /K can be used with the E file copy command (/K means
protection 0).

∂10 Oct 80 -- Two minor features.

The extension .DIS has been added to the good extension list.

The ⊗XLETEST command (stands for Line Editor TEST) is used to tell if the
current line would be too long to edit with the line editor.  This command
does nothing unless the line is too long, in which case it generates a
macro error (normal non-fatal kind).  This command is provided for use in
macros since attempting to entering the line editor (e.g., with a line
editor command) on a line that is too long results in a permanent STOP-ALL
macro error.  With this command, macros can avoid such a fatal error.

∂19 Nov 80 -- Three minor changes.

Creating file with extension ">" gets extension "1" if no old
  numeric extension exists.
Extension .PRE (PRESS file) added to bad extension list.
Extension .DO dropped below .MSG and .TXT in priority in good extension list.

∂14 Dec 80 - Fix to use of EXECUTE/PUTDEFS default filename extension.

A bug has been fixed that was causing E not to use the default
extension (.CMD) whenever a macro filename without an extension was
given in a ⊗XEXECUTE or ⊗XPUTDEFS command.  (The null extension was
being used by mistake, since August 1980.)

Also, when creating a new file with the CETV command or the /C switch,
the file is always opened in READWRITE mode (even if you say /R).
(This does not apply when copying a file with E, e.g., FILE1/R←FILE2.)

1981

∂28 Jan 81 - Added .INI to list of good extensions (for Lisp init files).

∂8 Mar 81 - ⊗XAUTOBURP command cleaned up.

Now, ⊗0⊗XAUTOBURP simply types out the current autoburp threshold,
just like plain ⊗XAUTOBURP does.  (⊗0⊗XAUTOBURP used to disable
autoburping, like ⊗-⊗XAUTOBURP does, but that was inconsistent
with most other ⊗0 arguments in E command.)

Also, Terse mode suppresses typing the result of an ⊗#⊗XAUTOBURP or
⊗-⊗XAUTOBURP command, as does executing such a command inside a macro.

∂10 Mar 81 - ⊗XDOVER command spools to Dover.

⊗XDOVER spools page or attach buffer text on the Dover just like ⊗XXSPOOL
spools on the XGP.  See the write-up for the spooling commands on p. 19
for how repeat arguments to these commands are interpreted.  (Just as with
the ⊗XXSPOOL and ⊗XSPOOL commands, no spooler switches can be specified.
The spooling always uses the default font and margins.)

∂18 Mar 81 - The extension .MSS (for Scribe) has been added to E's good list.

∂21 May 81 -- Miscellaneous fixes and improvements.

While a macro definition is being typed in for the ⊗XDEFINE command, an "M"
is displayed on E's header line to remind you that you are typing into a
macro definition.

The command ⊗0⊗XREDEFINE <macro name> <text><cr> defines the given macro
from the macro-format <text>, which is interpreted just like in a normal
⊗XREDEFINE, except that it is taken from the command line instead of from
the page or attach buffer).  This allows a REDEFINE of a macro without
altering the text of the incore page.  See also the following paragraph
about continuing the ⊗0⊗XREDEFINE command line onto subsequent lines to
be typed.

The commands ⊗XMAIL, ⊗XSEND, ⊗XREMIND, ⊗XDFIND, and ⊗0⊗XREDEFINE (all of
which take text from the extended command line) allow the user to
effectively continue the command line onto one or more subsequently typed
lines provided the command line is ended with a <lf> instead of with a
<cr>.  In this case, the continuing command text is terminated with αβ<lf>
(on displays) or ↑Z (on non-displays), or the command can be aborted by
typing <altmode>.  Also, each of these commands displays an "R" in the E
header line while the user is typing in this extra text.  All text taken
from the continued command line is placed ahead of any text being sent
from the page (or attach buffer).  Also, text handed to MAIL by the
⊗XMAIL, ⊗XSEND and ⊗XREMIND commands will have a <cr><lf> inserted at the
αβ<lf> (or ↑Z) if one does not already precede it, and any <formfeed> not
preceded or followed by a <cr><lf> will be turned into a <cr><lf> by the
MAIL program (other <formfeed>'s will be ignored by MAIL).  (The FIND
program, run by ⊗XDFIND, does not yet do anything particular with the
continuing text.)

Many extended commands that expect text following the command name now
allow that text to follow the command name immediately, without an
intervening space, provided the first character of such text is a valid
delimiter for the command name.  This change does not affect commands in
which the exact form of the text is critical, e.g., in ⊗XFIND, where a
space is still required to separate the "FIND" from the search string.
Basically, this is an attempt to avoid screwing the user when the
delimiting space is left out, as in ⊗XJFILL,,80<cr>, which used to ignore
the first comma and interpret the 80 as the left margin instead of the
right margin!

Bug fix to avoid losing one character from the line editor when αβI or αβ.
is given from the line editor inside a macro in ⊗XRAPID mode.

Bug fix to ensure that ⊗XBOTSET, ⊗XTOPSET and ⊗XHEIGHT really erase the
appropriate lines when the display configuration is being changed by these
commands.

Fix to scanning in the ⊗XLISPSYNTAX command that was briefly broken.

Added TFM,VNT,ANT to bad extension list.

∂27 May 81 -- Using MacLisp and PTY subjobs from E.

Many new commands have been added to allow an E user to control MacLisp
and/or PTY subjobs directly from E.  The PTY facilities provide most of
what has been called the Screen Editor.  For details, see p. 38.  For more
documentation of the MacLisp side of the partnership, READ EMACLSP.

∂28 May 81 -- ⊗-⊗X EECHO turns off E Echo while in Eval loop.

See p. 38, line 359, for details of ⊗XEECHO commands.

∂1 June 81 -- More commands to make using subjobs easier.

There is a new mode for disposition of subjob output text.  The new mode,
which is selected by the command ⊗XLPEND, puts all subjob output text at
the end of the last page that is in core when you give this command.  You
must be on that page (and file) to receive text while in this mode;
otherwise subjob text will be held up.  Of course, you can change modes at
any time; and you can give the ⊗XLPEND command again at any time to select
the (end of the) current page for subjob output.

The command ⊗-⊗XLRECEIVE holds up subjob output such that a message will
be typed out when output arrives.  This enables you to know when your
subjob has done something.  The command ⊗0⊗XLRECEIVE, which reports the
current state of holding, distinguishes between manual holding
(⊗-⊗XLRECEIVE) with nothing yet received and manual or automatic holding
(e.g., ⊗LPEND mode while on wrong page) with subjob output already
received (but not yet processed -- awaiting ⊗XLRECEIVE).  Manual as well
as automatic holding is cleared upon switching subjobs.

There has been a change in the ⊗0⊗XSUBLINK and ⊗-⊗XSUBLINK commands (note
the zero or negative argument).  Namely, ⊗0⊗XSUBLINK types the wholine of
your current subjob; and ⊗-⊗XSUBLINK kills your current subjob and
normalizes your page printer's size (provided it was previously bigger
than normal).  A positive argument still sets the size of the page
printer at the bottom of the screen.

The command ⊗XSUBKILL kills all your Lisp and PTY subjobs, naming them
as it goes.  Since this is a dangerous command if given by accident, it
cannot be abbreviated shorter than ⊗XSUBKIL and it cannot be given any
"repeat" argument.

The ⊗XSUBFIND command finds a PTY subjob and connects to it, creating one
if needed (just as the SUBLINK command does, except ⊗XSUBFIND doesn't
change the page printer size or enter the Eval loop).

The ⊗XSCREEN command puts you in the Screen Editor: that is, it finds and
connects to PTY subjob (a la ⊗XSUBFIND), turns on subjob echoing, moves to
end of the current page, selects ⊗XLPEND mode, and enter the Eval loop.
The CONTROL and META bits on the ⊗X in ⊗XSCREEN select between character
and line mode, just as they do in ⊗XEVAL and ⊗XSUBLINK.

To avoid having an altmode inserted at the end of the top level of macro
expansion, put the new command ⊗-⊗XMALTMODE inside your macro.
⊗XMALTMODE restores the default mode (enables altmode insertion), and
⊗0⊗XMALTMODE reports the current state state.  Calling a top level macro
resets this mode to the default, so ⊗-⊗XMALTMODE doesn't have much effect
when used outside of a macro.  This command is especially useful if your
macro ends with the ⊗XEVAL or ⊗XSUBLINK command, but it can also be useful
if the macro ends with any partially entered command, like ⊗F.

If you accidentally use ⊗#⊗XSLISP with the wrong job number and get a job
that doesn't have your PPN, E warns you of that fact and suggests that you
release that job with ⊗-⊗XSLISP.

∂23 July 81 -- More subjob commands, especially for use in macros.

The ⊗XSUBDETACH command detaches the current PTY subjob and then flushes
the (now jobless) PTY.  This can be useful is you want to start up some
sort of phantom or background job using E but don't want to stay connected
to that job.

The ⊗XLRECEIVE command has been expanded to allow it to be used to process
text from a subjob from the middle of a macro.  There are three new forms
of this command.  The new forms all have arguments preceding the command,
and all of them enable receiving subjob text (like the regular ⊗XLRECEIVE
command does).  Here are what they do.

  ⊗+⊗XLRECEIVE	Process text from the subjob immediately (even in a
		macro) if there is anything ready to be processed.  This
		command never waits for text to arrive, however.

  ⊗#⊗XLRECEIVE	Read exactly # lines from the subjob now, waiting if
		necessary until those lines (ended with CRLFs) have been
		received.

⊗+⊗#⊗XLRECEIVE	Read # or more lines from the subjob now, waiting if
		necessary until at least # lines (with CRLFs) have been
		received; if more text is ready at the same time, it too
		will be read.  This can be useful for trying to swallow the
		final prompt character ("." or "*", etc.) from a subjob that
		is finishing a command; note that if that prompt isn't
		followed by a CRLF, you can't read that "line" with
		⊗#⊗XLRECEIVE or E will wait forever for the missing CRLF.

Terse mode now suppresses "Connecting" and "Disconnecting" subjob messages.

Added .PRS to bad extension list.
Bug fix to ⊗XPROTECTION (to skip cmd name delimiter properly).